Java 使用PriorityQueue创建长类型maxHeap时,lambda表达式中的返回类型错误
我尝试使用PriorityQueue创建长类型maxHeapJava 使用PriorityQueue创建长类型maxHeap时,lambda表达式中的返回类型错误,java,heap,priority-queue,long-integer,Java,Heap,Priority Queue,Long Integer,我尝试使用PriorityQueue创建长类型maxHeap PriorityQueue<Long> maxHeap = new PriorityQueue<Long>((a, b) -> (b - a)); PriorityQueue maxHeap=newpriorityqueue((a,b)->(b-a)); 但是编译器返回了一个错误不兼容的类型:lambda表达式中的返回类型不正确 谁能解释一下: 为什么会有错误 正确的方法是什么 为什么会有错误 这是一
PriorityQueue<Long> maxHeap = new PriorityQueue<Long>((a, b) -> (b - a));
PriorityQueue maxHeap=newpriorityqueue((a,b)->(b-a));
但是编译器返回了一个错误不兼容的类型:lambda表达式中的返回类型不正确
谁能解释一下:
PriorityQueue
需要一个比较器
和比较器。compare(Long,Long)
方法具有签名int compare(Long o1,Long o2)代码>
但是,lambda表达式的结果类型long
,与所需的签名不匹配
正确的方法是什么
它要么使用自然顺序,要么使用无参数构造函数:
PriorityQueue<Long> maxHeap = new PriorityQueue<>();
旁注:即使对于整数
,(a,b)->a-b
也不是有效的比较器
lambda
如果A
大于b
,比较器必须返回大于零的值,但对于int A=2_000_000代码>和intb=-2_000_000代码>表达式a-b
的结果小于零(由于整数溢出)
因此,即使对于Integer
,也必须使用Integer::compare to
(如果有两个Integer
值)或Integer::compare
(如果有两个int
值)
为什么会有错误
这是一个错误,因为PriorityQueue
需要一个比较器
和比较器。compare(Long,Long)
方法具有签名int compare(Long o1,Long o2)代码>
但是,lambda表达式的结果类型long
,与所需的签名不匹配
正确的方法是什么
它要么使用自然顺序,要么使用无参数构造函数:
PriorityQueue<Long> maxHeap = new PriorityQueue<>();
旁注:即使对于整数
,(a,b)->a-b
也不是有效的比较器
lambda
如果A
大于b
,比较器必须返回大于零的值,但对于int A=2_000_000代码>和intb=-2_000_000代码>表达式a-b
的结果小于零(由于整数溢出)
因此,即使对于Integer
,也必须使用Integer::compare to
(如果有两个Integer
值)或Integer::compare
(如果有两个int
值)