对队列中的项目进行排序

Sort items in queue

我有一个 class 人,它有一个字段 - age。来自此 class 的对象被放入队列中:

ArrayDeque<Person> queue = new ArrayDeque<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?)

使用 PriorityQueue(Comparator<? super E> comparator) constructor, then call addAll(Collection<? extends E> c).

自从你说 "年龄 属性 的最大值 成为 第一", 你需要反转 Comparator by calling reversed().

因为 getAge() 可能 returns 和 int,你应该使用 comparingInt(ToIntFunction<? super T> keyExtractor).

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

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