- 开发环境 jdk1.8
传统的使用Comparator来进行排序, 从大到小的输出的写法如下, 需要使用 new Comparator来创建一个匿名的内部类来进行比较. 由于是从大到小降序,所以用o2-o1
public static void main(String[] args) {
String[] array = {"abc", "jk", "aghjghj", "u"};
System.out.println(Arrays.toString(array));
// 进行一次排序 按照 长度 由 大 到 小 排序
Arrays.sort(array, new Comparator() {
@Override
public int compare(String o1, String o2) {
return o2.length() - o1.length();
}
});
System.out.println(Arrays.toString(array));
}
使用Lambda后,可以直接在 Arrays.sort方法里面,传递一个Comparator接口的实现类,该实现类就是Lambda的返回值. 代码如下
public class Demo02Comparator {
// 函数式接口 作为返回值类型 返回的是 其实例 实现类对象
private static Comparator newComparator() {
//return 要的是函数式接口的实例
return (String a, String b)->{
return b.length()-a.length();
};
}
public static void main(String[] yu) {
String[] array={"abc", "jk", "aghjghj", "u"};
System.out.println(Arrays.toString(array));
//排序,长度由大到小输出
Arrays.sort(array, newComparator());
System.out.println(Arrays.toString(array));
}
}
控制台打印如下 其中newComparator方法可以简化如下 参数a,b去掉了String,原因是lambda的可推导即可省略特性
private static Comparator newComparator() {
//return 要的是函数式接口的实例
return (a, b)-> b.length()-a.length();
}
省略写法的规则为: 1. 小括号内参数的类型可以省略; 2. 如果小括号内有且仅有一个参,则小括号可以省略; 3. 如果大括号内有且仅有一个语句,则无论是否有返回值,都可以省略大括号、return关键字及语句分号。
因此如果一个方法的返回值类型是一个函数式接口,那么就可以直接返回一个Lambda表达式。