编译器(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/