事例代码:
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。