Сортировка элементов в очереди - PullRequest
0 голосов
/ 10 марта 2020

У меня есть класс Person, у которого есть поле - age. Объекты из этого класса помещаются в очередь:

ArrayDeque<Person> queue = new ArrayDeque<Person>();

Я бы хотел отсортировать элементы в очереди таким образом, чтобы Person с наибольшим значением свойства age стал первым в очереди. Я пытался использовать priorityQueue, но не знаю, как скопировать значения из обычной очереди в приоритетную и в то же время использовать для сравнения компаратор. Как мне заставить это работать?

Comparator<Person> sorter = Comparator.comparing(Person::getAge);

PriorityQueue<Person> priorityQueue = new PriorityQueue<Person>(queue, sorter);
(this is obviously invalid, is there a workaround so as to copy the queue and have a comparator at the same time?)

1 Ответ

1 голос
/ 10 марта 2020

Используйте конструктор PriorityQueue(Comparator<? super E> comparator), затем вызовите addAll(Collection<? extends E> c).

Так как вы сказали " наибольшее значение из свойство age становится first", вам необходимо изменить Comparator, позвонив по номеру reversed().

, начиная с getAge() скорее всего возвращает int, вы должны использовать comparingInt(ToIntFunction<? super T> keyExtractor).

Comparator<Person> sorter = Comparator.comparingInt(Person::getAge).reversed();

PriorityQueue<Person> priorityQueue = new PriorityQueue<>(sorter);
priorityQueue.addAll(queue);
...