Module java.base
Package java.util.function
package java.util.function
功能接口 为lambda表达式和方法引用提供目标类型。每个功能接口都有一个单一的抽象方法,称为该功能接口的功能方法,lambda表达式的参数和返回类型将与该方法匹配或适配。功能接口可以在多个上下文中提供目标类型,例如赋值上下文、方法调用或强制转换上下文:
// 赋值上下文
Predicate<String> p = String::isEmpty;
// 方法调用上下文
stream.filter(e -> e.getSize() > 10)...
// 强制转换上下文
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
- 参见:
-
ClassDescriptionBiConsumer<T,
U> 表示接受两个输入参数并不返回结果的操作。BiFunction<T,U, R> 表示接受两个参数并生成结果的函数。表示对相同类型的两个操作数进行操作,生成与操作数相同类型的结果。BiPredicate<T,U> 表示两个参数的谓词(返回布尔值的函数)。表示供应商提供boolean
值结果。Consumer<T>表示接受单个输入参数并不返回结果的操作。表示对两个double
值操作数进行操作,并生成double
值结果。表示接受单个double
值参数并不返回结果的操作。表示接受双精度值参数并生成结果的函数。表示一个参数的谓词(返回布尔值的函数)。表示供应商提供double
值结果。表示接受双精度值参数并生成整数值结果的函数。表示接受双精度值参数并生成长整数值结果的函数。表示对单个double
值操作数进行操作,生成double
值结果。Function<T,R> 表示接受一个参数并生成结果的函数。表示对两个int
值操作数进行操作,并生成int
值结果。表示接受单个int
值参数并不返回结果的操作。IntFunction<R>表示接受整数值参数并生成结果的函数。表示一个参数的谓词(返回布尔值的函数)。表示供应商提供int
值结果。表示接受整数值参数并生成双精度值结果的函数。表示接受整数值参数并生成长整数值结果的函数。表示对单个int
值操作数进行操作,生成int
值结果。表示对两个long
值操作数进行操作,并生成long
值结果。表示接受单个long
值参数并不返回结果的操作。LongFunction<R>表示接受长整数值参数并生成结果的函数。表示一个参数的谓词(返回布尔值的函数)。表示供应商提供long
值结果。表示接受长整数值参数并生成双精度值结果的函数。表示接受长整数值参数并生成整数值结果的函数。表示对单个long
值操作数进行操作,生成long
值结果。表示接受一个对象值和一个double
值参数,并不返回结果的操作。表示接受一个对象值和一个int
值参数,并不返回结果的操作。表示接受一个对象值和一个long
值参数,并不返回结果的操作。Predicate<T>表示一个参数的谓词(返回布尔值的函数)。Supplier<T>表示结果的供应商。ToDoubleBiFunction<T,U> 表示接受两个参数并生成双精度值结果的函数。表示生成双精度值结果的函数。ToIntBiFunction<T,U> 表示接受两个参数并生成整数值结果的函数。表示生成整数值结果的函数。ToLongBiFunction<T,U> 表示接受两个参数并生成长整数值结果的函数。表示生成长整数值结果的函数。表示对单个操作数进行操作,生成与操作数相同类型的结果。