【发布时间】:2018-09-28 03:29:34
【问题描述】:
这是 ListNode 类:
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
我正在尝试像这样初始化 PriorityQueue:
PriorityQueue<ListNode> heap = new PriorityQueue(lists.length,
(l1, l2) -> l1.val < l2.val ? -1 :
l1.val == l2.val ? 0 :
1);
但我得到“找不到符号:变量 val”。这样做的正确方法是什么?我尝试将 l1 和 l2 转换为 ListNode,但这没有任何作用。
编辑:为什么会这样?
PriorityQueue<ListNode> queue= new PriorityQueue<ListNode>(lists.size(),new Comparator<ListNode>(){
@Override
public int compare(ListNode o1,ListNode o2){
if (o1.val<o2.val)
return -1;
else if (o1.val==o2.val)
return 0;
else
return 1;
}
});
【问题讨论】:
-
public int val;你有它作为包级别。还有Integer.compare(l1.val, l2.val); -
但是为什么我可以在三元运算符之外访问它们呢?
-
我看到了一个编辑。在下面查看我的答案。它建议实现 Comparable 接口并将比较方法放入 ListNode。比较器是具有相似意图的不同事物。
-
谢谢。原来我的问题是语法错误。我忘了在括号前添加
-
@JohnTravicks stackoverflow.com/questions/2770321/…
标签: java priority-queue ternary-operator