1.为什么会有lamda表达式?
避免匿名内部类定义过多,简化代码
2.lamda表达式是什么?
首先需要知道什么是函数式接口,函数式接口是只有一个抽象方法的接口,lamda表达式可以用来表示函数式接口的实现类,如下是一个简单的接口和实现类
1 2 3 4 5 6 7 8 9 10 11
| //定义一个函数式的接口 interface Lam{ void lamda(); } //1.定义函数式接口的实现类 class Lamimpl implements Lam @Override public void lamda() { System.out.println("lamdaimpl1"); } }
|
使用lamda可以表示为如下,只重视参数类型和方法体,方法体只有一句代码的时候{}也可以省略
1
| Lam lam =()-> {System.out.println("lamda表达式创建!")};
|
3.lamda表达式的推演过程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| public class Lamda { //2.静态内部类 static class Lamimpl2 implements Lam { @Override public void lamda() { System.out.println("lamdaimpl2"); } } public static void main(String[] args) { Lam lam = new Lamimpl(); lam.lamda(); lam = new Lamimpl2(); lam.lamda(); //3.局部内部类 class Lamimpl3 implements Lam { @Override public void lamda() { System.out.println("lamdaimpl3"); } } lam = new Lamimpl3(); lam.lamda(); //4.匿名内部类 lam = new Lam() { @Override public void lamda() { System.out.println("lamdaimpl4"); } }; lam.lamda(); //5.lam表达式,简化匿名内部类,用来创建函数式接口(只有一个抽象方法的接口)的对象 lam = () -> System.out.println("lamda表达式创建!"); lam.lamda(); } } //定义一个函数式的接口 interface Lam { void lamda(); } //1.定义函数式接口的实现类 class Lamimpl implements Lam { @Override public void lamda() { System.out.println("lamdaimpl1"); } }
|