模块
java.base
Package java.util.function
功能接口为lambda表达式和方法引用提供目标类型。
每个功能接口都有一个抽象方法,称为该功能接口的功能方法 ,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
。 此注释不是编译器将接口识别为功能接口的必要条件,而仅是帮助捕获设计意图并获得编译器帮助识别意外违反设计意图的帮助。
功能接口通常表示抽象概念,如函数,操作或谓词。 在记录功能接口或引用键入为功能接口的变量时,通常直接引用那些抽象概念,例如使用“this function”而不是“this object表示的函数”。 当API方法以这种方式接受或返回功能接口时,例如“将提供的函数应用于......”,这被理解为对实现适当功能接口的对象的非空引用,除非明确指定了潜在的无效性。
此包中的功能接口遵循可扩展的命名约定,如下所示:
- 有几种基本功能形状,包括
Function
(一元函数T
至R
),Consumer
(一元函数T
至void
),Predicate
(一元函数T
至boolean
)和Supplier
(R
函数至R
)。 - 功能形状基于它们最常用的方式具有自然的特征。 可以通过arity前缀修改基本形状以指示不同的arity,例如
BiFunction
(二进制函数,T
和U
至R
)。 - 还有其他派生函数形状,它们扩展了基本函数形状,包括
UnaryOperator
(扩展Function
)和BinaryOperator
(扩展BiFunction
)。 - 功能接口的类型参数可以专用于具有附加类型前缀的基元。 要专门为具有泛型返回类型和泛型参数的类型返回类型,我们前缀为
ToXxx
,如ToIntFunction
中所示 。 否则,类型参数从左到右是专用的,如DoubleConsumer
或ObjIntConsumer
。 (类型前缀Obj
用于指示我们不想专门化此参数,但希望继续下一个参数,如ObjIntConsumer
中所示 。)这些方案可以组合,如IntToDoubleFunction
。 - 如果所有参数都有专门化前缀,则可以省略arity前缀(如
ObjIntConsumer
)。
- 从以下版本开始:
- 1.8
- 另请参见:
-
FunctionalInterface
-
接口摘要 接口 描述 BiConsumer<T,U> 表示接受两个输入参数并且不返回结果的操作。BiFunction<T,U,R> 表示接受两个参数并生成结果的函数。BinaryOperator<T> 表示对两个相同类型的操作数的操作,产生与操作数相同类型的结果。BiPredicate<T,U> 表示两个参数的谓词(布尔值函数)。BooleanSupplier 代表boolean
结果的供应商。Consumer<T> 表示接受单个输入参数并且不返回任何结果的操作。DoubleBinaryOperator 表示对两个double
操作数进行的操作,并生成double
值的结果。DoubleConsumer 表示接受单个double
值的参数并且不返回任何结果的操作。DoubleFunction<R> 表示接受双值参数并生成结果的函数。DoublePredicate 表示一个double
参数的谓词(布尔值函数)。DoubleSupplier 代表double
结果的供应商。DoubleToIntFunction 表示接受双值参数并生成int值结果的函数。DoubleToLongFunction 表示接受双值参数并生成长值结果的函数。DoubleUnaryOperator 表示对单个double
值操作数的操作,该操作数生成double
值的结果。Function<T,R> 表示接受一个参数并生成结果的函数。IntBinaryOperator 表示对两个int
值操作数的操作,并产生int
值的结果。IntConsumer 表示接受单个int
值的参数并且不返回任何结果的操作。IntFunction<R> 表示接受int值参数并生成结果的函数。IntPredicate 表示一个int
参数的谓词(布尔值函数)。IntSupplier 代表int
结果的供应商。IntToDoubleFunction 表示接受int值参数并生成双值结果的函数。IntToLongFunction 表示接受int值参数并生成长值结果的函数。IntUnaryOperator 表示对单个int
值操作数的操作,该操作数生成int
值的结果。LongBinaryOperator 表示对两个long
值操作数的操作,并产生long
值的结果。LongConsumer 表示接受单个long
值的参数并且不返回任何结果的操作。LongFunction<R> 表示接受长值参数并生成结果的函数。LongPredicate 表示一个long
参数的谓词(布尔值函数)。LongSupplier 代表long
结果的供应商。LongToDoubleFunction 表示接受长值参数并生成双值结果的函数。LongToIntFunction 表示接受长值参数并生成int值结果的函数。LongUnaryOperator 表示对单个long
值操作数的操作,该操作数生成long
值的结果。ObjDoubleConsumer<T> 表示接受对象值和double
参数的操作,并且不返回任何结果。ObjIntConsumer<T> 表示接受对象值和int
参数的操作,并且不返回任何结果。ObjLongConsumer<T> 表示接受对象值和long
参数的操作,并且不返回任何结果。Predicate<T> 表示一个参数的谓词(布尔值函数)。Supplier<T> 代表结果的供应商。ToDoubleBiFunction<T,U> 表示接受两个参数并生成双值结果的函数。ToDoubleFunction<T> 表示生成双值结果的函数。ToIntBiFunction<T,U> 表示接受两个参数并生成int值结果的函数。ToIntFunction<T> 表示生成int值结果的函数。ToLongBiFunction<T,U> 表示接受两个参数并生成长值结果的函数。ToLongFunction<T> 表示生成长值结果的函数。UnaryOperator<T> 表示对单个操作数的操作,该操作生成与其操作数相同类型的结果。