模块 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 (从TR的一元函数)、Consumer (从Tvoid的一元函数)、Predicate (从Tboolean的一元函数)和Supplier (零函数)到R)。
  • 函数形状根据它们最常用的方式具有自然的数量。可以通过元数前缀修改基本形状以指示不同的元数,例如 BiFunction (从 TUR 的二元函数)。
  • 还有一些扩展基本函数形状的派生函数形状,包括UnaryOperator (扩展Function)和BinaryOperator (扩展BiFunction)。
  • 功能接口的类型参数可以专门用于具有附加类型前缀的原语。为了专门化具有泛型返回类型和泛型参数的类型的返回类型,我们在 ToXxx 前面加上前缀,如 ToIntFunction 。否则,类型参数是从左到右专门化的,如 DoubleConsumer ObjIntConsumer 。 (类型前缀 Obj 用于表示我们不想专门化此参数,但想继续处理下一个参数,如 ObjIntConsumer 中所示。)这些方案可以组合,如 IntToDoubleFunction 中所示。
  • 如果所有参数都有专门化前缀,则可以省略元数前缀(如 ObjIntConsumer )。
自从:
1.8
参见:
  • 接口
    描述
    BiConsumer <T,U>
    表示接受两个输入参数且不返回任何结果的操作。
    BiFunction <T,U,R>
    表示接受两个参数并产生结果的函数。
    表示对两个相同类型的操作数的操作,产生与操作数相同类型的结果。
    表示两个参数的谓词(boolean函数)。
    代表 boolean 值结果的供应商。
    表示接受单个输入参数且不返回任何结果的操作。
    表示对两个 double 值操作数并产生 double 值结果的操作。
    表示接受单个 double 值参数且不返回任何结果的操作。
    表示接受双值参数并产生结果的函数。
    表示一个 double 值参数的谓词(boolean函数)。
    代表 double 值结果的供应商。
    表示接受双值参数并生成 int 值结果的函数。
    表示接受双值参数并产生长值结果的函数。
    表示对产生 double 值结果的单个 double 值操作数的操作。
    Function <T,R>
    表示接受一个参数并产生结果的函数。
    表示对两个 int 值操作数并产生 int 值结果的操作。
    表示接受单个 int 值参数且不返回任何结果的操作。
    表示接受 int 值参数并产生结果的函数。
    表示一个 int 值参数的谓词(boolean函数)。
    代表 int 值结果的供应商。
    表示接受 int 值参数并生成双值结果的函数。
    表示接受 int 值参数并产生 long 值结果的函数。
    表示对产生 int 值结果的单个 int 值操作数的操作。
    表示对两个 long 值操作数并产生 long 值结果的操作。
    表示接受单个 long 值参数且不返回任何结果的操作。
    表示接受长值参数并产生结果的函数。
    表示一个 long 值参数的谓词(boolean函数)。
    代表 long 值结果的供应商。
    表示接受长值参数并产生双值结果的函数。
    表示接受长值参数并生成 int 值结果的函数。
    表示对产生 long 值结果的单个 long 值操作数的操作。
    表示接受对象值和 double 值参数的操作,并且不返回任何结果。
    表示接受对象值和 int 值参数并且不返回任何结果的操作。
    表示接受对象值和 long 值参数并且不返回任何结果的操作。
    表示一个参数的谓词(boolean函数)。
    代表结果的提供者。
    表示接受两个参数并产生双值结果的函数。
    表示产生双值结果的函数。
    表示接受两个参数并生成 int 值结果的函数。
    表示生成 int 值结果的函数。
    表示接受两个参数并产生长值结果的函数。
    表示产生长值结果的函数。
    表示对单个操作数的操作,该操作产生与其操作数类型相同的结果。