Java内置功能接口
关于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 –表示一个长值参数的谓词(布尔值函数)。