多线程详解 -> Lambda表达式
- 希腊字母表中第十一位字母——λ,英文Lambda
- 为什么要使用Lambda表达式
- 避免匿名内部类定义过多;
- 可以让代码看起来简洁;
- 去掉了一堆没有意义的代码,只留下核心的逻辑。
- 实质属于函数式编程
- 函数式接口Functional Interface
- 任何接口,如果只包含唯一一个抽象方法,那么就是一个函数式接口;
- 对于函数式接口,可以通过Lambda表达式来创建该接口的对象。
/*
推导Lambda表达式
*/
public class TestLambda01 {
//3. 静态内部类
static class Like2 implements ILike{
@Override
public void lambda() {
System.out.println("I like Lambda2.");
}
}
public static void main(String[] args) {
ILike ilike = new Like();
ilike.lambda();
ilike = new Like2();
ilike.lambda();
//4. 局部内部类
class Like3 implements ILike{
@Override
public void lambda() {
System.out.println("I like Lambda3.");
}
}
ilike = new Like3();
ilike.lambda();
//5.匿名内部类:没有类的名称,必须借助接口或者父类
ilike = new ILike() {
@Override
public void lambda() {
System.out.println("I like Lambda4.");
}
};
ilike.lambda();
//6.用Lambda简化
ilike = ()-> {
System.out.println("I like Lambda5.");
};
ilike.lambda();
}
}
//1.定义一个函数式接口
interface ILike{
void lambda();
}
//2.实现类
class Like implements ILike{
@Override
public void lambda() {
System.out.println("I like Lambda.");
}
}
- Lambda简化
- 总结:
- ①lambda表达式只能有一行代码的情况下才能简化成一行;如果有多行,就要用代码块包裹
- ②前提是接口是函数式接口
- ③多个参数也可以去掉参数类型,要去掉都去掉
public class TestLambda02 {
//Lambda表达式简化
public static void main(String[] args) {
ILove love = (int a) -> {
System.out.println("I love you ->" + a);
};
//简化1.参数类型
love = (a) -> {
System.out.println("I love you ->" + a);
};
//简化2.括号
love = a -> {
System.out.println("I love you ->" + a);
};
//简化3.花括号
love = a -> System.out.println("I love you ->" + a);
love.love(1);
}
}
interface ILove{
void love(int a);
}