函数式接口

422 阅读1分钟

一言以蔽之,函数式接口就是只定义一个抽象方法的接口。例如Comparator(只有一个方法compare)和Runnable(只有一个方法run)都是函数式接口。

  函数式接口的抽象方法的签名基本上就是Lambda表达式的签名。我们将这种抽象方法叫做函数描述符。例如,Runnable接口可以看作一个什么也不接受也不返回(void)的函数的签名,因为它只有一个叫做run的抽象方法,这个方法什么也不接受,什么也不返回(void)。我们可以用一种特殊表示法来描述Lambda和函数式接口的签名。() -> void 代表了参数列表为空,且返回void的函数
  函数式接口定义且只定义了一个抽象方法。函数式接口很有用,因为抽象方法的签名可以描述Lambda表达式的签名。函数式接口的抽象方法的签名成为函数描述符。所以为了应用不同的Lambda表达式,你需要一套能够描述常见函数描述符的函数式接口。Java API中已经有了几个函数式接口,比如Comparator、Runnable和Callable。
Java8中的常用函数式接口:

函数式接口         函数描述符        
Predicate<T> T -> boolean
Consumer<T> T -> void
Function<T, R> T -> R
Supplier<T> () -> T
UnaryOperator<T> T -> T
BinaryOperator<T> (T, T) -> T
BiPredicate<L, R> (L, R) -> boolean
BiConsumer<T, U> (T, U) -> void
BiFunction<T, U, R> (T, U) -> R