十一、Lambda表达式
1. Lambda(λ)表达式:
- λ希腊字母表中排序第十一位的字母,英语名称为Lambda
- 避免匿名内部类定义过多
- 其实质属于函数式编程的概念
2. 为什么要使用Lambda表达式?
- 避免匿名内部类定义过多
- 可以让你的代码看起来很简洁
- 去掉了一堆没有意义的代码,只留下核心的逻辑。
3. 也许你会说,我看了Lambda表达式,不但不觉得简洁,反而觉得更乱,看不懂了。那是因为我们还没有习惯,用的多了,看习惯了,就好了。
4. 理解Functional lnterface(函数式接口)是学习Java8 lambda表达式的关键所在。函数式接口的定义:
- 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。如: Runnable接口
- 对于函数式接口,我们可以通过lambda表达式来创建该接口的对象。
//1.定义 函数式接口 interface IService{ void test(String msg); } //2.定义 实现类 class ServiceImp1 implements IService{ @Override public void test(String msg) { System.out.println("this is "+msg); } } public class TestLambda { static class ServiceImp2 implements IService{ //3.2静态内部类方式 @Override public void test(String msg) { System.out.println("this is "+msg); } } public static void main(String[] args) { //3.1 基本方式 IService service = new ServiceImp1(); service.test("basic"); //3.2静态内部类方式 service = new ServiceImp2(); service.test("static"); //3.3局部内部类方式 class ServiceImp3 implements IService{ @Override public void test(String msg) { System.out.println("this is "+msg); } } service = new ServiceImp3(); service.test("part"); //3.4匿名内部类方式 service = new IService(){ @Override public void test(String msg) { System.out.println("this is "+msg); } }; service.test("anonymous"); //3.5 Lambda方式 service = (msg)->{System.out.println("this is "+msg);}; //简化1:去参数括号 service = msg->{System.out.println("this is "+msg);}; //简化2:去方法体括号 service = msg->System.out.println("this is "+msg); service.test("lambda"); } }