Java 8 Lambda 不工作?

标签 java lambda java-8

您好,我有这个(我认为是)非常简单的代码:

List<Integer> f = new LinkedList<Integer>();
    Collections.sort(f, (Integer f1, Integer f2) -> {
        Integer.compare(f1,f2);
    });

但是,我得到以下编译错误:

Cannot convert from Comparator<Integer> to Comparator<? super T>

这不是很有帮助 - 出了什么问题?

最佳答案

在这种情况下你可以使用方法引用:

 List<Integer> f = new LinkedList<>();
 Collections.sort(f, Integer::compare);

原代码中缺少返回语句:

 Collections.sort(f, (f1 ,  f2) -> {
        return Integer.compare(f1,f2);
 });
如果 lambda 包含 {}

,则必须使用

return

相同的东西没有回车和括号:

Collections.sort(f, (f1 ,  f2) -> 
         Integer.compare(f1,f2)
);

下面评论部分的一些有用注释:

可以只使用 Collections.sort(f) 并依赖于自然排序。通过 Jean-François Savard

自 Java 8 List 接口(interface)有 sort 方法也可以使用 f.sort(null); f.sort(Comparator.naturalOrder());Collections.sort(f, Comparator.naturalOrder()); by Holger

关于Java 8 Lambda 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41805485/

相关文章:

具有泛型的 Java lambda 类型

c++ - Lambda 捕获 constexpr 对象

c++ - 在 C++0x 中模拟 finally block

java - 如何使用java Stream检查集合是否为空

java - Lambda 表示法 - 尝试重构但遇到问题

java - 删除其中一项后,如何立即在 listView 中更新每项显示的总价?

java - 在多个服务器上分配 Java 线程?

java - 计算与给定数 N 相乘形成的非素数对的数量,

java-8 - 在 Eclipse Mars 上,我在编译器合规性级别菜单中看不到 1.8

java - Sitemesh,无法构建工厂 : com. opensymphony.module.sitemesh.factory.DefaultFactory: