Java Lambda表达式:不兼容的类型:lambda表达式中的错误返回类型

时间:2018-04-29 20:18:18

标签: java sorting lambda collections java-8

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

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

我做错了什么,如何解决这个问题?谢谢!

3 个答案:

答案 0 :(得分:5)

您的comparator无效,因为它返回boolean,而预期的返回类型为int

一个简单的解决方案是:

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

或:

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

答案 1 :(得分:1)

问题出在以下一行

let formattedString = String(with: 1,2,3,4,separator:"...",terminator:"\t")
yourLabel.text = formattedString

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

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

当你将比较器实现为lambda时,你应该传递返回int的lambda,而不是boolean。

在你的情况下它应该像这样:

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

或使用@Aominè提供的代码段

答案 2 :(得分:0)

我将回答这个问题,因为我的问题是JDK

我正在bad return type上使用JDK 1.8.56进行编译,因此我更新到1.8.211,问题就消失了。