Java Function.compose() 方法及代码示例
生成一个组合函数, 该函数首先将 before 函数应用于当前函数的输入, 然后将当前函数应用于结果.
初见版本
1.8定义
default <V> Function<V,R> compose(Function<? super V,? extends T> before)
参数
参数类型 | 参数名称 | 参数描述 |
---|---|---|
类型参数 | T | 输入到函数的类型 |
类型参数 | R | 从函数返回的结果的类型 |
类型参数 | V | before 函数和组合函数的输入类型 |
Function<? super V,? extends T> | before | 应用当前函数后再应用的函数 |
返回值
返回一个先将输入应用于 before 函数, 再将产生的结果应用于当前函数的 Function
.
抛出的异常
NullPointerException
如果 before 参数为 null
说明
compose()
方法主要用于组装两个函数生成一个新的函数, 组合的新函数实际上是, before函数为当前 Function 做了前置的处理, 再调用当前 Function.
注意事项
如果对任一函数的执行引发异常, 则将其转发给组合函数的调用者.
示例
使用 Function.compose() 方法的示例
package com.yi21.function; import java.util.function.Function; public class Yi21FunctionCompose { public static void main(String[] args) { Function<String, String> hello = new Function<>() { @Override public String apply(String s) { if(s.equals("")) { return ""; } else { return "Hello, " + s; } } }; //超过5个字符将无法通过此过滤器 Function<String, String> longerThanFivefilter = new Function<>() { @Override public String apply(String t) { return t.length() > 5? "": t + "!"; } }; Function<String, String> filterTooLong = hello.compose(longerThanFivefilter); System.out.println("超过5个字符的将不会显示." + filterTooLong.apply("Aristotle")); System.out.println("正常调用:"); System.out.println(filterTooLong.apply("Jack")); System.out.println("实际执行过程:"); String r = longerThanFivefilter.apply("Jack"); System.out.println(hello.apply(r)); } }
执行结果为 :
超过5个字符的将不会显示. 正常调用: Hello, Jack! 实际执行过程: Hello, Jack!