模块 java.base
包 java.util.function
包java.util.function
Functional interfaces 为 lambda 表达式和方法引用提供目标类型。每个功能接口都有一个抽象方法,称为该功能接口的functional method,lambda 表达式的参数和返回类型与之匹配或适配。函数式接口可以在多个上下文中提供目标类型,例如赋值上下文、方法调用或强制转换上下文:
// Assignment context
Predicate<String> p = String::isEmpty;
// Method invocation context
stream.filter(e -> e.getSize() > 10)...
// Cast context
stream.map((ToIntFunction) e -> e.getSize())...
此包中的接口是 JDK 使用的通用功能接口,也可供用户代码使用。虽然它们没有确定 lambda 表达式可能适用的一组完整的函数形状,但它们提供的内容足以满足常见需求。为特定目的提供的其他功能接口,例如 FileFilter ,在使用它们的包中定义。
这个包中的接口用 FunctionalInterface 注释。此注释不是编译器将接口识别为功能接口的要求,而只是帮助捕获设计意图并争取编译器帮助识别意外违反设计意图。
函数式接口通常代表抽象概念,如函数、动作或谓词。在记录函数式接口或引用类型化为函数式接口的变量时,通常直接引用那些抽象概念,例如使用“这个函数”而不是“这个对象表示的函数”。当 API 方法被称为以这种方式接受或返回功能接口时,例如“将提供的功能应用于...”,这被理解为意味着非空对实现适当功能接口的对象的引用,除非明确指定潜在的无效性。
此包中的功能接口遵循可扩展的命名约定,如下所示:
- 有几个基本函数形状,包括
Function(从T到R的一元函数)、Consumer(从T到void的一元函数)、Predicate(从T到boolean的一元函数)和Supplier(零函数)到R)。 - 函数形状根据它们最常用的方式具有自然的数量。可以通过元数前缀修改基本形状以指示不同的元数,例如
BiFunction(从T和U到R的二元函数)。 - 还有一些扩展基本函数形状的派生函数形状,包括
UnaryOperator(扩展Function)和BinaryOperator(扩展BiFunction)。 - 功能接口的类型参数可以专门用于具有附加类型前缀的原语。为了专门化具有泛型返回类型和泛型参数的类型的返回类型,我们在
ToXxx前面加上前缀,如ToIntFunction。否则,类型参数是从左到右专门化的,如DoubleConsumer或ObjIntConsumer。 (类型前缀Obj用于表示我们不想专门化此参数,但想继续处理下一个参数,如ObjIntConsumer中所示。)这些方案可以组合,如IntToDoubleFunction中所示。 - 如果所有参数都有专门化前缀,则可以省略元数前缀(如
ObjIntConsumer)。
- 自从:
- 1.8
- 参见:
-
接口类描述BiConsumer <T,
U> 表示接受两个输入参数且不返回任何结果的操作。BiFunction <T,U, R> 表示接受两个参数并产生结果的函数。BinaryOperator <T>表示对两个相同类型的操作数的操作,产生与操作数相同类型的结果。BiPredicate <T,U> 表示两个参数的谓词(boolean函数)。代表boolean值结果的供应商。Consumer <T>表示接受单个输入参数且不返回任何结果的操作。表示对两个double值操作数并产生double值结果的操作。表示接受单个double值参数且不返回任何结果的操作。DoubleFunction <R>表示接受双值参数并产生结果的函数。表示一个double值参数的谓词(boolean函数)。代表double值结果的供应商。表示接受双值参数并生成 int 值结果的函数。表示接受双值参数并产生长值结果的函数。表示对产生double值结果的单个double值操作数的操作。Function <T,R> 表示接受一个参数并产生结果的函数。表示对两个int值操作数并产生int值结果的操作。表示接受单个int值参数且不返回任何结果的操作。IntFunction <R>表示接受 int 值参数并产生结果的函数。表示一个int值参数的谓词(boolean函数)。代表int值结果的供应商。表示接受 int 值参数并生成双值结果的函数。表示接受 int 值参数并产生 long 值结果的函数。表示对产生int值结果的单个int值操作数的操作。表示对两个long值操作数并产生long值结果的操作。表示接受单个long值参数且不返回任何结果的操作。LongFunction <R>表示接受长值参数并产生结果的函数。表示一个long值参数的谓词(boolean函数)。代表long值结果的供应商。表示接受长值参数并产生双值结果的函数。表示接受长值参数并生成 int 值结果的函数。表示对产生long值结果的单个long值操作数的操作。表示接受对象值和double值参数的操作,并且不返回任何结果。ObjIntConsumer <T>表示接受对象值和int值参数并且不返回任何结果的操作。ObjLongConsumer <T>表示接受对象值和long值参数并且不返回任何结果的操作。Predicate <T>表示一个参数的谓词(boolean函数)。Supplier <T>代表结果的提供者。ToDoubleBiFunction <T,U> 表示接受两个参数并产生双值结果的函数。ToDoubleFunction <T>表示产生双值结果的函数。ToIntBiFunction <T,U> 表示接受两个参数并生成 int 值结果的函数。ToIntFunction <T>表示生成 int 值结果的函数。ToLongBiFunction <T,U> 表示接受两个参数并产生长值结果的函数。ToLongFunction <T>表示产生长值结果的函数。UnaryOperator <T>表示对单个操作数的操作,该操作产生与其操作数类型相同的结果。