Module
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”而不是“由该对象表示的函数”。 当API方法被称为以这种方式接受或返回功能界面时,例如“将所提供的功能应用于...”,这被理解为对实现适当功能界面的对象的非空引用,除非明确指定潜在的无效。
该包中的功能接口遵循可扩展的命名约定,如下所示:
- 有几个基本功能的形状,包括
Function
(一元函数从T
到R
)Consumer
(一元函数从T
到void
)Predicate
(一元函数从T
到boolean
),和Supplier
(无参函数R
)。 - 功能形状基于它们最常用的方式具有自然界。 这些基本形状可以通过一个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> 表示对单个操作数产生与其操作数相同类型的结果的操作。