为什么要使用Lambda表达式:
- 避免匿名内部类定义过多
- 可以让代码看起来更简洁
- 去掉了一堆没有意义的代码,只留下核心的逻辑
函数式接口:
理解函数式接口是学习lambda表达式的关键所在。
函数式接口定义:
- 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口
- 对于函数式接口,我们可以通过lambda表达式来创建该接口的对象
示例:
示例一:
public class TestLambda1 {
// 3.静态内部类
static class Like2 implements ILike {
@Override
public void lambda() {
System.out.println("i like2");
}
}
public static void main(String[] args) {
ILike iLike = new Like1();
iLike.lambda();
iLike = new Like2();
iLike.lambda();
// 4.局部内部类
class Like3 implements ILike {
@Override
public void lambda() {
System.out.println("i like3");
}
}
iLike = new Like3();
iLike.lambda();
// 5.匿名内部类:没有类的名称,必须借助接口或者父类
iLike = new ILike() {
@Override
public void lambda() {
System.out.println("i like4");
}
};
iLike.lambda();
// 6.lambda简化
iLike = () -> {
System.out.println("i like5");
};
iLike.lambda();
}
}
// 1.定义一个函数式接口
interface ILike{
void lambda();
}
// 2.实现类
class Like1 implements ILike {
@Override
public void lambda() {
System.out.println("i like");
}
}
示例二:
public class TestLambda2 {
public static void main(String[] args) {
ILove iLove = (int a) -> {
System.out.println("i=" + a);
};
// 简化1:去掉参数类型:
iLove = (a) -> {
System.out.println("i=" + a);
};
// 简化2:去掉括号:
iLove = a -> {
System.out.println("i=" + a);
};
// 简化3:去掉花括号:
iLove = a -> System.out.println("i=" + a);
/**
* 总结:
* 1. lambda表达式只能有一行代码的情况下,才能简化成一行,如果有多行,那么就用代码块包裹
* 2. 前提是接口必须是函数式接口
* 3. 多个参数也可以去掉参数类型,多个参数必须加上括号
* 4.
*/
iLove.love(10);
}
}
interface ILove {
void love(int a);
}
更多可参考:https://www.cnblogs.com/franson-2016/p/5593080.html