Lambda 表达式是 JDK 8 开始后的一种新语法形式。语法格式如下:
() -> {
}
//()对应方法的形参
// -> 固定格式
//{}对应方法的方法体
样例:
Arrays.sort(arr new Comparator<Integer>(){
@override
public int compare(Integer o1, Integer o2){
return o1 - o2;
}
});
用 Lambda 表达式简化后:
Arrays.sort(arr (Integer o1, Integer o2) -> {
return o1 - o2;
}
);
- Lambda 表达式可以用来简化匿名内部类的书写
- Lambda 表达式只能简化函数式接口的匿名内部类的写法
- 函数式接口:有且仅有一个抽象方法的接口叫做函数式接口,上方可以加 @FunctionalInterface 注释
调用一个方法时,如果方法的形参是一个接口,那么我们要传递这个接口的实现类对象,如果实现类对象只要用到一次,就可以用匿名内部类的方式进行书写,就可以用 Lambda 表达式来简化匿名内部类的书写。
Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码,它可以写出更简洁,更灵活的代码,作为一种紧凑的代码风格,使 Java 语言表达能力得到提升。
在代码的书写过程中,代码风格的规范性是非常重要的。
Lambda 的省略规则(省略核心:可推导,可省略):
- 参数类型可以省略不写。
- 如果只有一个参数,参数类型可以省略,同时 () 也可以省略。
- 如果 Lambda 表达式的方法体只有一行,大括号,分号,return 可以同时省略不写。
Arrays.sort(arr new Comparator<Integer>(){
@override
public int compare(Integer o1, Integer o2){
return o1 - o2;
}
});
//Lambda完整格式
Arrays.sort(arr (Integer o1, Integer o2) -> {
return o1 - o2;
}
);
//Lambda省略写法
Arrays.sort(arr (o1, o2) -> o1 - o2);