第六天学习Lambda表达式
Lambda表达式
函数式接口:一个接口中只包含一个方法。
Lambda表达式:防止内部类过多,去掉一些没有意义的代码,只留下核心逻辑,可以让代码看起来很简洁。
Lambda表达式推导:
- 前提 接口必须为函数式接口
- 平常做法 实现类去实现接口,创建调用对象。
- 第一次简化 使用静态内部类去实现函数式接口。
- 第二次简化 使用局部内部类去实现函数式接口。
- 第三次简化 使用匿名内部类去实现函数式接口。(没有类名,必须借助接口或父类)。
- 第四次简化 使用lambda表达式简化。(因为第三次简化中new的接口和重写的方法都是固定的,所以只需要方法后面的东西,“一个括号,一个方法体({}也可省区)”,然后使用->从()指向方法体“()->System.out.printf("xxxx")”)。
Lambda表达式代码推导
package lambdal;
public class TestLambda{
//main方法
public static void main(String[] args) {
//传统做法 实例化LambdaImpl
Lambda lambda = new LambdaImpl1();
lambda.lambda();
//简化01使用静态内部类
Lambda lambda1 = new LambdaImpl2();
lambda1.lambda();
//化简02使用局部内部类,放在方法里面
class LambdaImpl2 implements Lambda {
@Override
public void lambda() {
System.out.println("重写了Lambda接口,简化02");
}
}
//化简02使用局部内部类,放在方法里面
Lambda lambda2 = new TestLambda.LambdaImpl2();
lambda2.lambda();
//化简03使用匿名内部类,没有类名称,必须借助接口或父类
Lambda lambda3 = new Lambda() {
@Override
public void lambda() {
System.out.println("重写了Lambda接口,简化03");
}
};
lambda3.lambda();
//简化04使用Lambda,因为是函数式接口,接口中只存在一个方法,所以方法名都是固定的,直接省略,直接简化为()和方法体。
//() System.out.println("重写了Lambda接口,简化03"); 再加入->即完成lambda表达式!
Lambda lambda4 = () -> System.out.println("重写了Lambda接口,简化04");
lambda4.lambda();
}
//简化01使用静态内部类
static class LambdaImpl2 implements Lambda {
@Override
public void lambda() {
System.out.println("重写了Lambda接口,简化01");
}
}
}
//传统做法 定义一个Lambda的实现类
class LambdaImpl1 implements Lambda {
@Override
public void lambda() {
System.out.println("重写了Lambda接口");
}
}
//定义一个函数式接口 Lambda
interface Lambda {
void lambda();
}
注意
-
接口必须为函数式接口!
-
lambda表达式方法体内只有一行代码时才可省略花括号,否在不能省略!