Java-13-Lambda表达式
避免内部类定义过多
让代码看起来很简洁,去掉无意义的代码,只留下了核心的逻辑
其实质属于函数式编程的概念
函数式接口
任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口
public interface Runnable{ public abstract void run(); }
对于函数式接口,可以通过lambda表达式来创建该接口的对象
推导Lambda表达式
/*
* 推导lambda表达式
* */
public class TestLambda1 {
//2.静态内部类
static class Fun2 implements FunInterface{
@Override
public void lambda() {
System.out.println("Inner: I like lambda!");
}
}
public static void main(String[] args) {
FunInterface fi = new Fun();
fi.lambda();
fi = new Fun2();
fi.lambda();
//3.局部内部类
class Fun3 implements FunInterface{
@Override
public void lambda() {
System.out.println("Inner: function: I like lambda!");
}
}
fi = new Fun3();
fi.lambda();
//4.匿名内部类,没有类的名称,借助接口,父类
fi = new FunInterface(){
@Override
public void lambda() {
System.out.println("Inner:NO Name:I like lambda!");
}
};
fi.lambda();
//5.用lambda简化,省略了接口和方法名
fi = () -> {
System.out.println("lambda simplify :I like lambda!");
};
fi.lambda();
}
}
//定义一个函数式接口
interface FunInterface{
void lambda();
}
//1.实现类
class Fun implements FunInterface{
@Override
public void lambda() {
System.out.println("I like lambda!");
}
}
lambda表达式的再化简
//lambda表达式的再化简
//lambda 表达式在核心逻辑仅有一行的情况下可以化至最简,多行用代码块
//前提是 接口是函数式接口(仅有一个抽象方法)
//多个参数也可以去掉参数类型,必须+()
public class TestLambda2 {
public static void main(String[] args) {
ILove il = (int a) -> {
System.out.println("I love you"+a);
};
il.love(520);
//简化1,去掉参数类型
il = (a) -> {
System.out.println("I love you"+a);
};
il.love(521);
//简化2.去掉括号
il = a -> {
System.out.println("I love you"+a);
};
il.love(523);
//简化3.去掉花括号
il=a -> System.out.println("I love you"+a);
il.love(524);
}
}
interface ILove{
void love(int a);
}