您好,我有这个(我认为是)非常简单的代码:
List<Integer> f = new LinkedList<Integer>();
Collections.sort(f, (Integer f1, Integer f2) -> {
Integer.compare(f1,f2);
});
但是,我得到以下编译错误:
Cannot convert from
Comparator<Integer>
toComparator<? 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/