mat*_*lat 15 java arrays sorting lambda java-8
我想months使用Arrays.sort方法按长度对数组中的String元素进行排序.我在这里被告知,可以使用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
}
}
Run Code Online (Sandbox Code Playgroud)
ass*_*ias 52
最干净的方式是:
Arrays.sort(months, Comparator.comparingInt(String::length));
Run Code Online (Sandbox Code Playgroud)
或者,使用静态导入:
Arrays.sort(months, comparingInt(String::length));
Run Code Online (Sandbox Code Playgroud)
但是,这也可以,但更详细:
Arrays.sort(months,
(String a, String b) -> a.length() - b.length());
Run Code Online (Sandbox Code Playgroud)
或更短:
Arrays.sort(months, (a, b) -> a.length() - b.length());
Run Code Online (Sandbox Code Playgroud)
最后你的最后一个:
Arrays.sort(months,
(String a, String b) -> { return Integer.signum(a.length() - b.length()) };
);
Run Code Online (Sandbox Code Playgroud)
有;错位的-它应该是:
Arrays.sort(months,
(String a, String b) -> { return Integer.signum(a.length() - b.length()); }
);
Run Code Online (Sandbox Code Playgroud)