我试图创建一个优先级队列,根据第一个元素的值对整数数组进行排序,但我遇到了一个问题,编译器正在抱怨在Comporator lambda表达式中请求数组。知道我搞砸了什么吗?
PriorityQueue<int[]> kNearest = new PriorityQueue((a, b) -> b[0] > a[0]);
Line 22: error: array required, but Object found
PriorityQueue<int[]> kNearest = new PriorityQueue((a, b) -> b[0] > a[0]);
^
Line 22: error: array required, but Object found
PriorityQueue<int[]> kNearest = new PriorityQueue((a, b) -> b[0] > a[0]);发布于 2022-05-25 04:26:55
谢谢Kiran和zatef!我忘了钻石操作员。我还通过返回一个布尔值而不是一个int来搞乱我的传播者。
固定版本:PriorityQueue<int[]> kNearest = new PriorityQueue<int[]>((a, b) -> b[0] - a[0]);
发布于 2022-05-25 04:27:44
为了简单地回答您的问题,您将返回一个布尔值,而不是比较器所要求的整数。
只需尝试以下几点:
PriorityQueue<int[]> kNearest = new PriorityQueue<>((a, b) -> Integer.compare(b[0],a[0]));与a相比,这将根据b的较小值对项目进行排序。
这里的比较器检查是否相等,并返回以下内容:
当第一个参数较小时,“<0”(例如-1)
当两个参数相等时,“0”。
'> 0‘(例如1)当第二个参数较小时
更新:正如@Stephen在评论中指出的那样,减法并不是完全的证明。有关详细信息,请查看this。将更新答案以使用Integer.compare(int,int)方法。
https://stackoverflow.com/questions/72371854
复制相似问题