Java中的Lambda和JavaScript的箭头函数很相似。
如JavaScript的箭头函数:
var isNegative = (num) => num < 0
[1, 2, 3, -4].filter(isNegative)
对应Java代码则是:
Predicate<Integer> isNegative = num -> num < 0;
Stream<Integer> integerStream = Stream.of(1, 2, 3, -4)
.filter(isNegative);
Lambda的本质是一个函数式接口的语法糖。以上面的代码为例:
Predicate<Integer> isNegative = num -> num < 0;
等同于以下代码:
class Negative implements Predicate<Integer> {
@Override
public boolean test(Integer integer) {
return integer < 0;
}
}
Predicate isNegative = new Negative();
直觉上Lambda节省了很多代码,这种节省有几个前提:
- 想表示一个接口的实例
- 这个接口只需要实现一个方法
对应于上面的Predicate接口,我只需要实现test方法就行了。所以我就不需要先去用一个类去实现这个接口,然后再实例化这个类。
总结
Lambda表达式是单一抽象方法接口的语法糖,如果一个接口只有一个方法需要实现,就可以使用Lambda表达式实例化这个接口








网友评论