1、定义
函数式接口就是只定义一个抽象方法的接口。接口现在还可以拥有默认方法(即在类没有对方法进行实现时,其主体为方法提供默认实现的方法)。哪怕有很多默认方法,只要接口只定义了一个抽象方法,它就仍然是一个函数式接口 。

2、作用
Lambda表达式允许你直接以内联的形式对函数式接口的抽象方法提供实现,并把整个表达式作为函数式接口的实例。函数式接口也可以用匿名内部类进行实现,Lambda表达式只是一种简便的实现方式。

3、函数描述符
函数式接口的抽象方法的签名基本上就是Lambda表达式的签名。我们将这种抽象方法叫作函数描述符。

Predicate<T>: 提供一个test方法,它接受泛型T对象,并返回一个布尔类型,
Consumer<T>: 提供一个accept的抽象方法,它接受泛型T的对象,没有返回(void)
Function<T, R>: 提供一个apply的方法,它接受一个泛型T的对象,并返回一个泛型R的对象,可以定义一个
Lambda,将输入对象的信息映射到输出,就可以使用这个接口(比如提取苹果的重量,或把字符串
映射为它的长度)

网友评论