Java 8 Lambda不工作?

bha*_*ral 4 java lambda java-8

嗨,我有这个(我假设是)真正琐碎的代码:

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

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

无法转换Comparator<Integer>Comparator<? super T>

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

Ant*_*iuc 12

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

 List<Integer> f = new LinkedList<>();
 Collections.sort(f, Integer::compare);
Run Code Online (Sandbox Code Playgroud)

在原始代码中缺少return语句:

 Collections.sort(f, (f1 ,  f2) -> {
        return Integer.compare(f1,f2);
 });
Run Code Online (Sandbox Code Playgroud)

如果lambda包含,则必须使用 return{}

没有返回和括号的相同的事情:

Collections.sort(f, (f1 ,  f2) -> 
         Integer.compare(f1,f2)
);
Run Code Online (Sandbox Code Playgroud)

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

可以使用Collections.sort(f)和依赖自然顺序.作者:Jean-FrançoisSavard

由于Java 8 List接口具有sort也可以使用的方法,f.sort(null); f.sort(Comparator.naturalOrder());或者Collections.sort(f, Comparator.naturalOrder());Holger使用

  • 你可以简单地做Collections.sort(f)并依赖自然顺序. (5认同)
  • 或``f.sort(null);`.或者,`f.sort(Comparator.naturalOrder());`或,`Collections.sort(f,Comparator.naturalOrder());`也可以. (2认同)