Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用PriorityQueue创建长类型maxHeap时,lambda表达式中的返回类型错误_Java_Heap_Priority Queue_Long Integer - Fatal编程技术网

Java 使用PriorityQueue创建长类型maxHeap时,lambda表达式中的返回类型错误

Java 使用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创建长类型maxHeap

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
    值)