Java学习笔记(1)Lambda是函数式接口的语法糖

Java中的Lambda和JavaScript的箭头函数很相似。

如JavaScript的箭头函数:

var isNegative = (num) => num < 0

[1, 2, 3, -4].filter(isNegative)

对应Java代码则是:

Predicate isNegative = num -> num < 0;
Stream integerStream = Stream.of(1, 2, 3, -4)
                .filter(isNegative);

Lambda的本质是一个函数式接口的语法糖。以上面的代码为例:

Predicate isNegative = num -> num < 0;

等同于以下代码:

class Negative implements Predicate {

    @Override
    public boolean test(Integer integer) {
        return integer < 0;
    }
}
Predicate isNegative = new Negative();

直觉上Lambda节省了很多代码,这种节省有几个前提:

  1. 想表示一个接口的实例
  2. 这个接口只需要实现一个方法

对应于上面的Predicate接口,我只需要实现test方法就行了。所以我就不需要先去用一个类去实现这个接口,然后再实例化这个类。

总结

Lambda表达式是单一抽象方法接口的语法糖,如果一个接口只有一个方法需要实现,就可以使用Lambda表达式实例化这个接口

你可能感兴趣的:(Java学习笔记(1)Lambda是函数式接口的语法糖)