解析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