解析Consummer函数式接口中的andThen方法


事例代码:

1 public static void main(String[] args) {
2         Consumer<Integer> consumer = x -> System.out.println(x);
3         Consumer<Integer> consumer2 = x -> {
4             int a = x + 4;
5             System.out.println(a);
6         };
7         consumer.andThen(consumer2).accept(10);
8 }
Consumer中andThen代码:
1   default Consumer<T> andThen(Consumer<? super T> after) {
2         Objects.requireNonNull(after);
3         return (T t) -> { accept(t); after.accept(t); };
4     }

输出结果:

当时学习的疑惑:为什么consumer.andThen(consumer2).accept(10);先执行的是accept(10),是不是有一个accept()被吞了?后来认真一看,原来addThen方法返回的是Comsumer<T>这才恍然大悟。

解析:

consumer.addThen(consumer) 返回的是一个consumer对象,当继续执行accpt(10)的时候,它得到了一个为10的参数,相当于accpt(10)是一个开始的标志,

接着就会执行accept(10)----System.out.println(10),

affter.accept(10)----a = 10+4;System.out.println(14)

所以最后输出就是14。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM