Java内置功能接口

时间:2020-01-09 10:35:13  来源:igfitidea点击:

关于Java函数接口的文章概述了函数接口,以及如何使用Lambda表达式实现函数接口。同时,这并不意味着每当我们要使用lambda表达式时,都必须编写自己的自定义功能接口。在Java中,当与Java中的lambda表达式一起使用时,有许多内置的功能接口涵盖了许多不同的上下文。

内置功能接口Java包

在Java中,有一个包java.util.function,它定义了JDK使用的以及用户代码使用的许多通用功能接口。

此软件包中的功能接口可分为五种类型

1.消费者
2.功能
3.谓词
4.供应商
5.扩展功能的运算符

消费者功能界面

java.util.function.Consumer <T>功能接口表示一个接受单个输入参数且不返回结果的操作。消费者的定义如下所示,其中包含抽象方法accept和默认方法andThen()

@FunctionalInterface
public interface Consumer<T> {
  void accept(T t);

  default Consumer<T> andThen(Consumer<? super T> after) {
    Objects.requireNonNull(after);
    return (T t) -> { accept(t); after.accept(t); };
  }
}

这是其他预定义的Consumer功能接口的列表,这些接口共享使用传递的值且不返回结果的相同行为。

  • BiConsumer <T,U> –表示一个接受两个输入参数且不返回结果的操作。

  • DoubleConsumer –表示一个接受单个双值参数并且不返回结果的操作。

  • IntConsumer –表示一个接受单个int值参数且不返回结果的操作。

  • LongConsumer –表示一个接受单个长值参数且不返回结果的操作。

  • ObjDoubleConsumer <T> –表示一个接受对象值和双值参数的操作,不返回任何结果。

  • ObjIntConsumer <T> –表示一个接受对象值和int值参数的操作,不返回任何结果。

  • ObjLongConsumer <T> –表示一个接受对象值和长值参数的操作,不返回任何结果。

供应商功能界面

java.util.function.Supplier <T>功能接口表示提供结果的函数。供应商界面定义如下

@FunctionalInterface
public interface Supplier<T> {
  T get();
}

这是共享提供结果的相同行为的预定义供应商功能接口的列表。

  • BooleanSupplier –表示布尔值结果的提供者。

  • DoubleSupplier –代表具有双重价值的结果的供应商。

  • IntSupplier –代表具有int值的结果的供应商。

  • LongSupplier –代表长期价值结果的供应商。

功能功能界面

java.util.function Function <T,R>功能接口表示一个接受一个参数并产生结果的函数。
此功能接口中的抽象方法是apply(Object)。

@FunctionalInterface
public interface Function<T, R> {
  R apply(T t);
}

这是其他预定义的函数功能接口的列表,这些函数接口具有接受参数和产生结果的相同行为。

  • BiFunction <T,U,R> –表示一个接受两个参数并产生结果的函数。

  • DoubleFunction <R> –表示一个接受双值参数并产生结果的函数。

  • DoubleToIntFunction –表示一个函数,该函数接受双值参数并产生一个int值的结果。

  • DoubleToLongFunction-表示一个函数,该函数接受双值参数并产生长值结果。

  • IntFunction <R> –表示一个接受带有int值的参数并产生结果的函数。

  • IntToDoubleFunction –表示一个函数,该函数接受一个int值的参数并产生一个双值的结果。

  • IntToLongFunction –表示一个函数,该函数接受一个int值的参数并产生一个长值的结果。

  • LongFunction <R> –表示一个接受长值参数并产生结果的函数。

  • LongToDoubleFunction –表示一个函数,该函数接受一个长值参数并产生一个双值结果。

  • LongToIntFunction –表示一个函数,该函数接受一个长值参数并产生一个int值的结果。

  • ToDoubleBiFunction <T,U>-表示一个接受两个参数并产生双值结果的函数。

  • ToDoubleFunction <T> –表示一个产生双值结果的函数。

  • ToIntBiFunction <T,U>-表示一个接受两个参数并产生int值的结果的函数。

  • ToIntFunction <T> –表示产生整数值结果的函数。

  • ToLongBiFunction <T,U>-表示一个接受两个参数并产生长值结果的函数。

  • ToLongFunction <T>-表示产生长值结果的函数。

有关使用者接口的示例,请参阅Java使用者功能接口示例。有关BiConsumer接口的示例,请参见BiConsumer功能接口Java示例。

操作员功能接口

函数功能接口可能会产生与参数类型相同或者不同的结果,但是有些操作员函数接口始终返回与传递的参数类型相同的值。基本操作员功能接口扩展了其对应的功能接口,例如UnaryOperator扩展了Function和BinaryOperator扩展了BiFunction。

  • BinaryOperator <T> –表示对两个相同类型的操作数的运算,产生与该操作数相同类型的结果。

  • DoubleBinaryOperator –表示对两个双值操作数的运算,并产生双值结果。

  • DoubleUnaryOperator –表示对产生双值结果的单个双值操作数的操作。

  • IntBinaryOperator –表示对两个具有int值的操作数进行运算并产生int值的结果。

  • IntUnaryOperator –表示对单个具有整数值的结果的整数值操作数的运算。

  • LongBinaryOperator –表示对两个长值操作数的运算,并产生长值结果。

  • LongUnaryOperator –表示对单个长值操作数的操作,该操作数产生长值结果。

  • UnaryOperator <T> –表示对单个操作数的操作,该操作产生与其操作数相同类型的结果。

谓词功能接口

java.util.function.Predicate <T>功能接口表示一个布尔值函数,返回true或者false。此功能接口中的抽象方法是test(Object)。

@FunctionalInterface
public interface Predicate<T> {
  boolean test(T t);
}

以下是预定义谓词功能接口的列表,它们共享接受参数和产生布尔结果的相同行为。

BiPredicate <T,U>-表示两个参数的谓词(布尔值函数)。
DoublePredicate –表示一个双值参数的谓词(布尔值函数)。
IntPredicate –表示一个int值参数的谓词(布尔值函数)。
LongPredicate –表示一个长值参数的谓词(布尔值函数)。