第 2 章 java.util.function

第 1 章讨论了 lambda 表达式和方法引用的基本语法,二者在任何情况下都不能脱离上下文(context)而存在。lambda 表达式和方法引用总是被赋给函数式接口,它提供了所实现的单一抽象方法的信息。

Java 标准库中的许多接口仅包含一个抽象方法,它们属于函数式接口。为此,Java 8 专门定义了 java.util.function 包,它仅包含可以在库的其余部分重用的函数式接口。

java.util.function 包中的接口分为四类,分别是 Consumer(消费型接口)、Supplier(供给型接口)、Predicate(谓词型接口)以及 Function(功能型接口)。Consumer 接口传入一个泛型参数(generic argument),不返回任何值;Supplier 接口不传入参数,返回一个值;Predicate 接口传入一个参数,返回一个布尔值;Function 接口传入一个参数,返回一个值。

每种基本接口还包含若干相关的接口。以 Consumer 接口为例,用于处理基本数据类型的是 IntConsumerLongConsumerDoubleConsumer 接口,BiConsumer 接口传入两个参数并返回 void

虽然根据定义,这一章讨论的函数式接口只包含一个抽象方法,但大部分接口也包含声明为 staticdefault 的方法。对于开发人员而言,掌握这些方法有助于提高工作效率。