java:带有lambda表达式的Arrays.sort()

我想使用Arrays.sort方法按长度对数组中的String元素进行Arrays.sort 。 我在这里被告知,可以使用lambda表达式而不是创建实现Comparator的新类。 它是否完全相同,但它不起作用。

 import java.util.Arrays; import java.util.Comparator; public class MainClass { public static void main(String[] args) { String[] months = {"January","February","March","April","May","June","July","August","September","October","December"}; System.out.println(Arrays.toString(months)); //printing before //neither this works: Arrays.sort(months, (a, b) -> Integer.signum(a.length() - b.length()) ); //nor this: Arrays.sort(months, (String a, String b) -> { return Integer.signum(a.length() - b.length()) }; ); System.out.println(Arrays.toString(months)); //printing after } } 

最干净的方式是:

 Arrays.sort(months, Comparator.comparingInt(String::length)); 

或者,使用静态导入:

 Arrays.sort(months, comparingInt(String::length)); 

但是,这也可行,但更详细:

 Arrays.sort(months, (String a, String b) -> a.length() - b.length()); 

或更短:

 Arrays.sort(months, (a, b) -> a.length() - b.length()); 

最后你的最后一个:

 Arrays.sort(months, (String a, String b) -> { return Integer.signum(a.length() - b.length()) }; ); 

; 错位 – 它应该是:

 Arrays.sort(months, (String a, String b) -> { return Integer.signum(a.length() - b.length()); } ); 

你在找这个:

 Arrays.sort(months, (a, b) -> Integer.signum(a.length() - b.length())); 

您正在寻找的function是Java 8,尚未发布。 如果您想等待,或者如果没有可用的beta下载,它计划在几个月内发布。