对队列中的项目进行排序
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);
我有一个 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);