编译器(Java 8)抱怨以下代码没有合适的构造函数:

PriorityQueue<ListNode> heap = new PriorityQueue((ListNode n1, ListNode n2) -> n1.val - n2.val)


但是,先创建比较器,然后将其传递给PriorityQueue是可行的,

Comparator<ListNode> c = (ListNode n1, ListNode n2) -> n1.val - n2.val;
PriorityQueue<ListNode> heap = new PriorityQueue(c);


我不知道为什么第一种方法会失败?是否因为编译器无法从lambda表达式推断Comparator类型?

最佳答案

您正在使用此PriorityQueue(Comparator<? super E> comparator)构造函数。并且您没有为E提供任何类型,其中E应该为ListNode。要修复您的代码,只需像这样编写

PriorityQueue<ListNode> heap = new PriorityQueue<ListNode>((ListNode n1, ListNode n2) -> n1.val - n2.val);
// or
PriorityQueue<ListNode> heap = new PriorityQueue<>((ListNode n1, ListNode n2) -> n1.val - n2.val);

关于java - 用比较器初始化PriorityQueue,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60140529/

10-09 00:31