【问题标题】:Sorting list of list in Java using lambda使用 lambda 在 Java 中对列表进行排序
【发布时间】:2018-11-03 18:07:48
【问题描述】:

我有一个列表元素列表,现在我想使用 lambda 表达式对该列表进行排序,但出现编译错误:

这是没有 lambda 的工作代码:

Collections.sort(positions, new Comparator<List<Integer>>() {
    public int compare(List<Integer> ele1, List<Integer> ele2) {
        // some logic here
        return some_number;
    }
});

现在使用 lamda,我正在尝试这个:

positions.sort((List<Integer> ele1, List<Integer> ele2) -> {

});

但是得到这个编译错误:

The method sort(Comparator<? super List<Integer>>) in the type List<List<Integer>> is not applicable for the arguments ((List<Integer> ele1, List<Integer> ele2) -> {})

【问题讨论】:

  • 你忘记从你的 lambda 返回 some_number。

标签: java lambda java-8 compiler-errors


【解决方案1】:

您的 lambda 中缺少 return 语句:

positions.sort((List<Integer> ele1, List<Integer> ele2) -> {
    // logic...
    return some_number;
});

但是请注意,在 Java 8 中对此类列表进行排序的惯用方法是使用 Comparator#comparing 调用:

positions.sort(Comparator.comparing(l -> logic_that_produces_some_comparable));

【讨论】:

    【解决方案2】:

    .sort 需要一个接收两个列表并返回一个整数的函数。

    您提供的 lambda 包含两个列表,但不返回任何内容。

    您需要在 lambda 中返回一个值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-05
      • 1970-01-01
      • 2017-07-30
      • 2017-03-23
      • 1970-01-01
      • 2010-10-17
      • 2020-11-11
      相关资源
      最近更新 更多