JAVA高级函数套娃的骚操作
在项目代码中发现一个骚操作,2个高级函数套起来使用,一开始有点迷糊,后来写了个单测跑了下明了了。
function的结果作为convertFun的入参
@Test public void test(){ processTemplate((m) -> m + " somthing", (paramA, paramB) -> paramA + paramB); } public <D> void processTemplate(Function<String, D> function, BiFunction<D, String, String> convertFun){ D applyDInfo = function.apply("do"); System.out.println(applyDInfo); String applyResult = convertFun.apply(applyDInfo, "。。。"); System.out.println(applyResult); }
BiFunction<T, U, R>
/** * 返回一个组合函数,该函数首先将此函数应用于其输入,然后将after函数应用于结果。 如果任一函数的求值引发异常,则将其转发给组合函数的调用者。 * 参数: * after – 应用此函数后要应用的函数 * 类型参数: * <V> – after函数和组合函数的输出类型 * 回报: * 一个组合函数,首先应用此函数,然后应用after函数 * 抛出: * NullPointerException – 如果 after 为 null */ default <V> BiFunction<T, U, V> andThen(Function<? super R, ? extends V> after) { Objects.requireNonNull(after); return (T t, U u) -> after.apply(apply(t, u)); }