为什么要使用 Lambda 表达式?
Lambda 是一个匿名函数,可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。
- 避免匿名内部类定义过多
- 可以让代码看起来更简洁
- 去掉没有意义的代码,只留下核心的逻辑
函数式接口
理解 Functional Interface(函数式接口)是学习 Lambda 表达式的关键所在。
函数式接口的定义:
- 任何接口,如果只包含唯一一个抽象方法,那么该接口就是一个函数式接口。
- 对于函数式接口,可以通过 Lambda 表达式来创建该接口的对象。
Demo
public class LambdaTest {
/**
* 3、静态内部类
*/
static class Happy2 implements Smile {
@Override
public void lambdaSmile() {
System.out.println("Smile!Smile!Smile2222222!");
}
}
public static void main(String[] args) {
Smile happy = new Happy();
happy.lambdaSmile();
happy = new Happy2();
happy.lambdaSmile();
/**
* 4、局部内部类
*/
class Happy3 implements Smile {
@Override
public void lambdaSmile() {
System.out.println("Smile!Smile!Smile3333333!");
}
}
happy = new Happy3();
happy.lambdaSmile();
/**
* 5、匿名内部类,没有类的名称,必须借助接口或者父类
*/
happy = new Smile() {
@Override
public void lambdaSmile() {
System.out.println("Smile!Smile!Smile4444444!");
}
};
happy.lambdaSmile();
/**
* 6、用 Lambda 简化
*/
happy = () -> {
System.out.println("Smile!Smile!Smile4444444!");
};
happy.lambdaSmile();
}
}
/**
* 1、定义一个函数式接口
*/
interface Smile{
void lambdaSmile();
}
/**
* 2、实现类
*/
class Happy implements Smile {
@Override
public void lambdaSmile() {
System.out.println("Smile!Smile!Smile!");
}
}
简化
- 无参
public class LambdaTest2 {
public static void main(String[] args) {
ILove lover = () -> System.out.println("我爱迪丽热巴");
lover.love();
}
}
interface ILove {
void love();
}
- 有一个参
public class LambdaTest2 {
public static void main(String[] args) {
ILove lover = who -> System.out.println("6、我爱" + who);
lover.love("迪丽热巴");
}
}
interface ILove {
void love(String who);
}
- 有两个参
public class LambdaTest2 {
public static void main(String[] args) {
ILove lover = (me, you) -> me * you;
System.out.println(lover.love(1, 2));
}
}
interface ILove {
int love(int me, int you);
}