使用比较器初始化PriorityQueue

问题描述 投票:1回答:1

编译器(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类型吗?

java lambda comparator
1个回答
0
投票

您正在使用此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);
© www.soinside.com 2019 - 2024. All rights reserved.