BiFunction界面中的默认andThen()方法

mar*_*und 6 java function-composition java-8

有一个默认的方法andThen()BiFunction接口(java.util.function包).

default <V> BiFunction<T,U,V> andThen(Function<? super R,? extends V> after)

文件说:

返回首先将此函数应用于其输入的组合函数,然后将after函数应用于结果.如果对任一函数的求值抛出异常,则将其转发给组合函数的调用者.

理解解释的含义并不容易让人困惑.根据我的理解,andThen()调用默认方法时会返回一个组合函数.在类型上调用此组合函数,TU返回该类型V.最后,有after关于类型R和调用的函数和函数V.

这种方法有什么需要?它如何真正适合图片?

Ous*_* D. 5

理解解释的含义并不容易。

为了尽可能简单地解释它,该方法andThen返回一个函数,该函数首先将给定函数应用于输入,然后将另一个函数应用于该应用程序的结果。

假设我们有两个函数fg,函数f执行一些逻辑,函数g执行一些其他类型的逻辑,因此当您编写时,f.andThen(g)这本质上意味着g(f(x))我们首先应用作为参数给出的函数f(x),然后将该函数应用于g结果。

例子:

BiFunction<Integer, Integer, Integer> f = Math::addExact; 
Function<Integer, Integer> g = e -> e * 2; 
System.out.println(f.andThen(g).apply(10,10)); // 40
Run Code Online (Sandbox Code Playgroud)

我们首先调用 function f(10, 10),然后取出 is 的结果20,将其传递给函数g(20)并执行乘以20,从而2产生40

老实说,调用函数的语法Java并不是最好的,所以我可以理解,当有人第一次看到这个时,它可能很难掌握,并且随着你编写函数的次数越来越多,例如在C#一个可以简单地做g(f(10, 10))那些肉眼可见的更容易遵循、阅读和理解的事情。

这个方法有什么必要呢?它实际上如何融入图片中?

根据我的经验,我组成如上所示的函数的情况并不常见,但我可以想象的一个典型场景是,如果您有各种实用程序方法来执行某些逻辑,其中一个函数的结果进一步传递给其他函数进行处理,其中在这种情况下,您可以使用函数组合通过组合实用方法来创建各种转换管道。