什么是lambda表达式?如何是用它
的有关信息介绍如下:“λ”是希腊字母的第11个,英文名叫lambda。
lambda可以用来简化线程,它是JDK8的新特性。
现在JDK的版本已经更新到12了,未来JDK8的使用也将会越来越广泛,lambda表达式也将会越来越频繁的出现在我们所看到的代码中。所以很有必要学习一下这个新知识。今天小编就和大家一起学习一下lambda。
首先创建一个线程:听歌3次,然后在主线程中调用一次这个线程;
我们发现,这个线程类LambdaThread只使用了一次。
一个类如果只用一次,为了提升性能,可以把它做内部类。
所以LambdaThread类可以改成静态内部类的形式,如下:
我们还可以把静态内部类移动到方法中,叫作方法内部类
方法内部类如果只使用一次,我们甚至可以把类名省略掉,这种内部类叫作匿名内部类。(匿名内部类的创建需要借助父类或者接口)
lambda就是在匿名内部类的基础上把接口名和方法名都删掉,只保留方法体
创建一个接口:ILove,接口中有一个方法:lambda
创建一个实现类:Love,实现ILove接口
接着就可以写lambda表达式了:
ILove love = ()-> {
System.out.println("i love lambda2");
};
love.lambda();
上面的lambda表达式都是没有参数的,接下来我们来看一下带参数的lambda表达式要怎么写。
如下图:我们可以看到,带参数的lambda表达式,我们直接把参数写在括号里就可以了,和方法的使用类似。
lambda表达式还可以简化,书写起来更加简洁:
.类型可以省略,会自动匹配类型
.只有一个参数的情况下,括号也可以省略
只有一行代码的情况下,花括号也可以省略
最后看一种带两个参数和返回值的lambda表达式要怎么写:
接口的方法带返回值时,lambda表达式也要返回值,但是当代码只有一行的时候可以省略return
用lambda表达式来替换匿名内部类:
public class LambdaThread9{
public static void main(String[] args) {
new Thread(()->{
for (int i = 0; i < 3; i++) {
System.out.println("一边工作");
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
new Thread(()->{
for (int i = 0; i < 3; i++) {
System.out.println("一边崩溃");
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}