为什么需要使用Lambda表达式?
- 避免匿名内部类定义过多
- 简化代码
- 只保留核心逻辑,清晰明了
哪里可以用到Lambda表达式?
Lambda表达式实际上是函数式编程的思想,对于函数式接口,我们可以通过Lambda表达式来创建该接口的对象。
函数式接口:只包含唯一一个抽象方法的接口。
逐步演进过程(JDK8加入Lambda)
代码:
/**
* 推导Lambda表达式
* @author 王子龙
* @date Created in 9:29 2020/8/12
*/
public class LambdaTest {
//3.静态内部类
static class Lambda2 implements ILambda {
@Override
public void lambda() {
System.out.println("实现类2");
}
}
public static void main(String[] args) {
ILambda lambda = new Lambda1();
lambda.lambda();
lambda = new Lambda2();
lambda.lambda();
//4.局部内部类
class Lambda3 implements ILambda {
@Override
public void lambda() {
System.out.println("实现类3");
}
}
lambda = new Lambda3();
lambda.lambda();
//5.匿名内部类,没有类名称,必须借助接口或者父类
lambda = new ILambda() {
@Override
public void lambda() {
System.out.println("实现类4");
}
};
lambda.lambda();
//6.Lambda表达式
lambda = () -> {
System.out.println("实现类5");
};
lambda.lambda();
}
}
//1.定义一个函数式接口
interface ILambda {
void lambda();
}
//2.外部实现类
class Lambda1 implements ILambda {
@Override
public void lambda() {
System.out.println("实现类1");
}
}
结果:
对Lambda表达式的再简化
- 对于只有一条语句的,可以去掉花括号。
- 对于有参数的,可以去掉参数类型。
代码:
/**
* 简化Lambda表达式
* @author 王子龙
* @date Created in 9:45 2020/8/12
*/
public class LambdaTest2 {
public static void main(String[] args) {
//Lambda表达式简化1
Lambda2 lambda2 = (int a,int b) -> {
System.out.println(a + b + "简化1");
};
lambda2.fun(1,2);
//Lambda表达式简化2
lambda2 = (a,b) -> {
System.out.println(a + b + "简化2");
};
lambda2.fun(1,2);
//Lambda表达式简化3
lambda2 = (a,b) -> System.out.println(a + b + "简化3");
lambda2.fun(1,2);
}
}
interface Lambda2 {
void fun(int a,int b);
}
结果: