Java lambda表达式:不兼容类型:lambda表达式中的不良返回类型



我有以下作业列表,每个元素都是包含利润和难度的列表:

List<List<Integer>> jobs = new ArrayList<>();
for (int i = 0; i < difficulty.length; i++) {
    List<Integer> job = new ArrayList<Integer>();
    job.add(profit[i]);
    job.add(difficulty[i]);
    jobs.add(job);
}

现在,我想根据下面的利润(每个作业的第一个元素(对工作进行分类:

jobs.sort((j1, j2) -> j1.get(0) > j2.get(0));

但是有以下错误:

error: incompatible types: bad return type in lambda expression

我做错了什么,我该如何解决?谢谢!

您的比较器无效,因为它返回了boolean,而预期的返回类型为int

一个简单的解决方案是:

jobs.sort(Comparator.comparing(e -> e.get(0)));

或:

jobs.sort((j1, j2) -> Integer.compare(j1.get(0), j2.get(0)));

问题是以下行

jobs.sort((j1, j2) -> j1.get(0) > j2.get(0));

是您不遵循排序方法的签名:

default void sort(Comparator<? super E> c)

当您将比较器作为lambda实现时,您应该通过返回int而不是布尔值的lambda。

在您的情况下应该是这样的:

jobs.sort((j1, j2) -> compare two lists somehow to return int);

或使用 @aominè提供的摘要

在我的情况下,我会回答这个beacuse,问题是JDK

我正在使用JDK 1.8.56进行bad return type编译,因此我更新到1.8.211,并且赠品已经消失了。

最新更新