Lamda表达式
【狂神说Java】多线程详解_哔哩哔哩_bilibili
1.啥东西
- 为什么要使用lambda表达式
- 避免匿名内部类定义过多
- 可以让你的代码看起来很简洁
- 去掉了一堆没有意义的代码,只留下核心的逻辑。
也许你会说,我看了Lambda表达式,不但不觉得简洁,反而觉得更乱,看不懂了。那是因为我们还没有习惯,用的多了,看习惯了,就好了。
1. 函数式接口
理解Functional Interface(函数式接口)是学习Java8 lambda表达式的关键所在。
函数式接口的定义:
任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。
对于函数式接口,我们可以通过lambda表达式来创建该接口的对象。
2.Lambda表达式优化过程
看代码:
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 47 48 49 50 51 52 53 54 55 56 57 58 59
| interface ILike{ void lambda(); }
class Like implements ILike{ @Override public void lambda() { System.out.println("2.普通的实现类"); } }
public class TestLambda1 { static class Like2 implements ILike{ @Override public void lambda() { System.out.println("3.放在类内部的类,使用static"); } }
public static void main(String[] args) { ILike like1 = new Like(); like1.lambda();
ILike like2 = new Like2(); like2.lambda();
class Like3 implements ILike{ @Override public void lambda() { System.out.println("4.局部内部类,放在main方法里面"); } }
ILike like3 = new Like3(); like3.lambda();
ILike like4 = new ILike() { @Override public void lambda() { System.out.println("5.匿名内部类,不再需要类名,直接父类/接口的构造函数后面{}跟子类代码"); } }; like4.lambda();
ILike like5 = ()->{ System.out.println("6.Lambda简化后,不再需要构造方法名和函数名,根据变量类型来判断的。加个->"); }; like5.lambda(); } }
|
3.带参数的 Lambda表达式
看代码就行了
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
| interface Printer{ void myPrint(String s); }
public class TestLambda2 { public static void main(String[] args) { String a = "Hello World";
Printer printer1 = (String s)->{ System.out.println("Lambda1 + " + s); }; printer1.myPrint(a);
Printer printer2 = (s)-> { System.out.println("去参数类型: "+s); }; printer2.myPrint(a); Printer printer3 = s-> { System.out.println("去小括号: "+s); }; printer3.myPrint(a); Printer printer4 = s-> System.out.println("一行的时候,去大括号: "+s); printer4.myPrint(a); } }
|
多线程中的 Runnable 就是一个函数式接口。