Lambda 是什么
Lambda 并不是一个字母缩写组合, 在IT开发中这个词代表的是匿名函数。
Java 8 之前, 相对于java script/python 等语言中的匿名函数, 我们更常用的是使用匿名类
匿名类例子
接口Cal (计算类)
public interface Cal {
int cal(int a, int b);
}
Client 类, 新建加法对象和乘法对象, 并执行
public void runApp() {
Cal add = new Cal() {
@Override
public int cal(int a, int b) {
return a + b;
}
};
int c = add.cal(3,4);
log.info("3 + 4 = {}", c);
Cal mult = new Cal() {
@Override
public int cal(int a, int b) {
return a * b;
}
};
c = mult.cal(3,4);
log.info("3 * 4 = {}", c);
}
通俗易懂, 我们直接得到了加法和乘法的对象, 并不需要显式创建加法类和乘法类。但是不够简洁
Java 8中 添加了Lambda 语法
上面的例子可以改写成
public void runApp() {
Cal add = (int a, int b) ->{
return a + b;
};
int c = add.cal(3,4);
log.info("3 + 4 = {}", c);
Cal mult = (int a, int b) ->{
return a * b;
};
c = mult.cal(3,4);
log.info("3 * 4 = {}", c);
}
没有了 new, 没有了返回的值类型。但是可读性变差了
其实可以看出
Lambda表达式只支持函数式接口 也就是只有一个抽象方法的接口。
可以使用@FunctionalInterface标注函数式接口,在编译时提前发现错误。