使用lambda表达式的原因是:
避免匿名类定义过多
可以让代码看起来简洁
去掉没有意义的代码,只留下核心逻辑
理解Functional Interface(函数式接口)是学习lambda表达式的关键
函数式接口定义:
任何接口,如果只包含一个抽象方法,那就是一个函数式接口
对于函数式接口,可以通过lambda表达式创建该接口的对象
package duoxiancheng;
//推导lambda表达式
public class TestLambda {
//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表达式,十分方便
再试一下,接口实现的方法是带参数的,是一样的
package duoxiancheng;
public class TestLambda2 {
//静态内部类
static class Love2 implements ILove{
@Override
public void love(int a) {
System.out.println("I love you -> " + a);
}
}
public static void main(String[] args) {
ILove love = new Love();
love.love(2);
love = new Love2();
love.love(3);
//局部内部类
class Love2 implements ILove{
@Override
public void love(int a) {
System.out.println("I love you -> " + a);
}
}
love = new TestLambda2.Love2();
love.love(4);
//匿名内部类
love = new ILove() {
@Override
public void love(int a) {
System.out.println("I love you -> " + a);
}
};
love.love(5);
//lambda表达式
love = (int a) -> {
System.out.println("I love you -> " + a);
};
love.love(520);
//进一步简化,去掉参数类型
love = a -> System.out.println("I love you -> " + a);
love.love(521);
}
}
interface ILove{
void love(int a);
}
class Love implements ILove{
@Override
public void love(int a) {
System.out.println("I love you -> " + a);
}
}
运行结果:
I love you -> 2
I love you -> 3
I love you -> 4
I love you -> 5
I love you -> 520
I love you -> 521
Process finished with exit code 0
再啰嗦一下,接口必须是函数式接口,才能使用lambda表达式
好了,今天先到这里~