我正在尝试了解启动优先级队列的以下行:
PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> b[1] - a[1]);
与文档中的构造函数部分进行比较, https://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html
我无法弄清楚它使用的构造函数。有人可以分享一下这个想法吗?
此外,是否有一个文档可以更好地解释/定义语法(a, b) -> b[1] - a[1]
...虽然我可以猜到它的含义。
非常感谢!
答案 0 :(得分:6)
PriorityQueue
的构造使用1.7中尚未存在的构造函数,这是您链接的Javadoc的版本。
它使用为Java 1.8添加的constructor that takes a Comparator
,它与您提供的lambda表达式匹配。
Java 1.8引入了使用默认初始容量创建
PriorityQueue
,并根据指定的比较器对其元素进行排序。<强>时间:强>
1.8
Lambda expressions。在这里,基本上你有2个参数和表达式与功能接口匹配 - Comparator
。
答案 1 :(得分:3)
从Java 8开始,there's a new constructor的参数为Comparator
:
public PriorityQueue(Comparator<? super E> comparator)
因此,使用lambda进行初始化是有效的Java 8+代码。
答案 2 :(得分:1)