Lambda概述
Lambda表达式是 JDK8 开始后的一种新语法形式。
作用:简化匿名内部类的代码写法。
Lambda表达式的简化格式
() -> {}
(匿名内部类被重写方法的形参列表) -> {
被重写方法的方法体代码}
注:-> 是语法形式,无实际含义
注意:Lambda 表达式只能简化函数式接口的匿名内部类的写法形式
什么是函数式接口?
- 首先必须是接口,其次接口中有且仅有一个抽象方法的形式
- 通常我们会在接口上加上一个@FunctionalInterface注解,标记该接口必须是满足函数式接口
示例:
public class lambda1 {
public static void useInterA(InterA interA){
interA.show();
}
public static void main(String[] args) {
// 这里是匿名内部类的实现方式
useInterA(new InterA() {
@Override
public void show() {
System.out.println("匿名内部类重写后的show方法");
}
});
System.out.println("========================================");
// 这里是Lambda的实现方式
useInterA(() ->{
System.out.println("lambda表达式重写后的show方法");
});
}
}
@FunctionalInterface
interface InterA{
void show();
}
Lambda表达式的省略写法
- 参数类型可以省略不写。
- 如果只有一个参数,参数类型可以省略,同时 () 也可以省略。
- 如果Lambda表达式的方法体代码只有一行代码
- 可以省略大括号不写,同时要省略分号
- 此时,如果这行代码是return语句,必须省略return不写,同时也必须省略 “;” 不写
方法引用(Method Reference)
方法引用是 JDK8 开始出现,主要作用是对 lambda 表达式进行进一步简化。
- 方法引用是使用一对冒号 ::
- 通过方法的名字来指向一个方法
- 可以使语言的构造更紧凑简洁,减少冗余代码
给出一个 list 集合,并用 lambda 表达式进行遍历打印:
亮黄色区域提示我们可以用方法引用替换 lambda 表达式:
方法引用具有可推导可省略原则,省略参数。
此外,对于方法引用,静态方法为 类名::方法名;非静态方法为 对象名::方法名。