版权声明:支持原创,注明出处。 https://blog.csdn.net/qq_38584967/article/details/87217813
前言
lambda表达式表达更为简洁,但是效率并不比原来高,多用于多线程中简化频繁使用的匿名内部类函数。lambda表达式并非所有场景都适用。
正文
下面介绍Lambda的使用,首先定义一个接口:
interface ILike{
void lambda();
}
作为比较,首先先介绍其他的方式实现接口,首先建一个测试类,其中分别实现接口:
public class LambdaTest_1 {
/**
* 静态内部类
*/
static class Like2 implements ILike{
@Override
public void lambda() {
System.out.println("Hello Lambda2");
}
}
public static void main(String[] args) {
//引用外部类
ILike like = new Like();
like.lambda();
//静态内部类
ILike like2 = new Like2();
like2.lambda();
//局部内部类
class Like3 implements ILike{
@Override
public void lambda() {
System.out.println("Hello Lambda3");
}
}
ILike like3 = new Like3();
like3.lambda();
//匿名内部类
ILike like4 = new ILike(){
@Override
public void lambda() {
System.out.println("Hello Lambda4");
}
};
like4.lambda();
}
}
interface ILike{
void lambda();
}
/**
* 外部类
*/
class Like implements ILike{
@Override
public void lambda() {
System.out.println("Hello Lambda");
}
}
实现了常见的几种接口实现方式并调用了接口方法,这里看到匿名内部类,我们通过匿名内部类来引出我们的lambda表达式简化匿名内部类:
//匿名内部类
ILike like4 = new ILike(){
@Override
public void lambda() {
System.out.println("Hello Lambda4");
}
};
like4.lambda();
//简化为Lambda表达式
ILike like5 = () -> {
System.out.println("Hello Lambda5");
};
like5.lambda();
看到lambda表达式省略了new ILike,直接表达为()->{…},括号里面也省略了重写方法的方法名,直接写实现的方法体。可以得出, lambda对只有一个内部方法的接口进行简化,使得代码更简洁可观。
当然,lambda也能传递参数:
interface ILove{
int lambda(int a);
}
/**
* Lambda表达式
*/
ILove love5 = (a) -> {
return a;
};
/**
* 最简化的形态,参数只有一个,可以省略参数括号,
* 实现方法语句只有一句时省略大括号,个人认为没必要,保持上面的一般写法就行了。
*/
ILove love6 = a -> a;
Lambda用于线程
new Thread(() -> {
System.out.println("努力学习,天天向上");
...
}).start();
//多线程使用Lambda表达式
new Thread(() -> System.out.println("努力学习,天天向上")).start();
Lambda表达就介绍这么多,其实并不复杂,实在不能一步到位,可以先参照最上面,先用其他方式实现接口,然后一步步的对比简化,最后就得到了lambda表达式的书写。