- public static void main(String[] args) {
- Consumer
c1=msg -> System.out.println(msg.toUpperCase()); - Consumer
c2= msg -> System.out.println(msg.toLowerCase()); - String str = "this is world";
- c1.andThen(c2).accept(str);
- }
- // consumer中的andThen 代码
- default Consumer
andThen(Consumer super T> after) { - Objects.requireNonNull(after);
- return (T t) -> { accept(t); after.accept(t); };
- }
函数式编程就是为了应对一些不需要关心方法名,参数名以及实现方法的场景而有的产物,函数式编程有在用,但也用的不是很明白,今天看了下源代码就感到 andThen很奇怪:
accept(t);after.accept(t); 明明是没有返回值的,但是前面为什么可以加return呢??
后来发现return返回的是一个构造Consumer对象的过程
consumer.andThen()方法解析:
这里面是先将调用者本身执行一次accept()方法,然后再将参数中的Consumer对象(after)执行一次accept
也可以理解为:c1.andThen(c2)是将c1和c2合成一个新的c3然再执行accept(),
c3的方法逻辑是先执行c1.accept(t)逻辑,然后再执行c2.accept(t)。
c1.accept(t):是将传进来的字符串转为大写
c2.accept(t):是将传进来的字符串转为小写,注意:参数t不受c1的执行结果影响
执行结果:
- THIS IS WORLD
- this is world
-
- Process finished with exit code 0