这篇文章是关于Java提供的功能接口的。我们将简要讨论基本的。这些功能接口被 Streams API大量使用,因此了解它们将使你的生活更轻松。除非你愿意,不只是流,你还可以在任何地方使用它。
先决条件
只要确保你对功能接口和lambda有了深刻的了解。这篇文章取决于这些概念。
java.util.function
我们将在你的茶歇中讨论的功能接口来自 java.util.function。该软件包包含Java的通用功能接口。这有助于我们避免重复写入,从而节省了时间。
它具有许多功能接口(你的代码中可能不需要那么多),但是我们将看到最常见和最有用的功能接口。我们将其与常规方法或函数进行比较,以更好地理解。
消费者<T>
顾名思义,它Consumer消耗输入。调用时不返回任何内容。它类似于具有void返回类型的函数。此功能接口有两种方法 void accept(T t):触发和接口,可以触发andThen(Consumer<T>)多个使用方。
你可以使用调用多个消费者,andThen(consumer1).andThen(consumer2).....然后调用 accept(t)函数来终止链。此链中的所有使用者将使用通过给出的相同输入 accept()。
谓词<T>
所述Predicate
用于boolean
值。它测试给定值,并通过调用返回布尔值test(T t)
。然后,再次与Consumer一样,您可以使用与的链接and(anotherPredicate)
。test(T)
最后致电时,我们将完成整个链。与消费者相似,他们在整个链中使用相同的输入。仅当所有谓词都返回true时,它才返回true;否则,它仅返回true。否则,它返回false。
函数<T,R>
是的,那是名字。与前面的接口不同,它Function
具有两个通用参数。第一个参数用于输入类型,第二个参数用于返回类型。本质上, Function
用于将给定值转换为所需值。
功能 apply(T t)
用于其功能和andThen(anotherFuntion)
链接。但是,与Consumer
和 不同 Predicate
,此链接并未对所有都使用相同的值Functions
。 而是使用前一个的结果 Function
。但是,请记住,随后 Function
的输入类型与当前的Function’s
返回类型等效 。
BiFunction <T,U,V>
BiFunction
与相似Function
,不同之处在于 接受两个输入参数,而不是 Function
,后者仅处理一个输入。它apply(T t, U u)
用于触发。使用此方法Function
而不是 使用BiFuntion
in进行链接 andThen(Function<V v, E e>)
,因为方法没有两个返回值。
供应商<T>
到目前为止,我们已经讨论了采用输入参数的接口。Supplier
另一方面,不要求任何论点;它只是通过调用产生一个get()
,类似于产生没有输入值的方法,例如toString()
或hashCode()
。我们不能在其中使用链接,因为它不接受输入参数。
等等,还有更多!
软件包中还有更多的功能接口。它们是针对特定挑战或用途的上述功能接口的实现。我们不必了解每个功能接口。如果你了解我们所讨论的接口,那将是你的最佳选择。让我们简要地看一下。
以下示例表来自Java文档。