java lambda函数复合的一个问题?

  public class Letter {
    public static String addHeader(String text) {
        return "head " + text;

    }

    public static String addFooter(String text) {
        return text + " foot";
    }

    public static String checkSpelling(String text) {
        return text.replaceAll("123", "lambda");
    }

    public static void main(String[] args) {
        Function<String, String> addHeader = Letter::addHeader;
        Function<String, String> stringStringFunction = addHeader.andThen(Letter::checkSpelling).andThen(Letter::addFooter);
        String wan_lbdb = stringStringFunction.apply("123");
        System.out.println(wan_lbdb);
    }
}
 

这段代码为什么输出的是
head lambda foot
头尾的123为什么没有输出

阅读 2k
1 个回答

Function

R apply(T t) – 将Function对象应用到输入的参数上,然后返回计算结果。

default <V> Function<T,V> andThen(Function<? super R,? extends V> after) 返回一个先执行当前函数对象apply方法再执行after函数对象apply方法的函数对象。

Function<String, String> addHeader = Letter::addHeader;
Function<String, String> stringStringFunction = addHeader.andThen(Letter::checkSpelling).andThen(Letter::addFooter);
String wan_lbdb = stringStringFunction.apply("123");
System.out.println(wan_lbdb);

andThen 是在 addHeader 增加后续要执行的函数对象

也就是 (stringStringFunction) = addHeader -> checkSpelling -> addFooter 这样的执行顺序

stringStringFunction.apply("123")

addHeader -> checkSpelling -> addFooter = head lambda foot

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题