Java 8 peek() 方法的一些疑惑
Stream.of("one", "two", "three", "four").peek(e -> System.out.println(e));
這樣不會有任何的輸出;
Stream.of("one", "two", "three", "four").peek(e -> System.out.println(e)).collect(Collectors.toList());
這樣輸出:
one
two
three
four
Stream.of("one", "two", "three", "four")
.peek(e -> System.out.println("Peeked value: " + e))
.map(String::toUpperCase)
.peek(e -> System.out.println("Mapped value: " + e))
.collect(Collectors.toList());
這樣輸出:
Peeked value: one
Mapped value: ONE
Peeked value: two
Mapped value: TWO
Peeked value: three
Mapped value: THREE
Peeked value: four
Mapped value: FOUR
知道 peek() 方法接受一個實現了 consumer 介面的類,但是實在是搞不清楚到底它是如何執行的。
------------------------------------------------------------------------------------------------------------------------------------------------
peek不是終結操作,其返回值還是Stream,你這種情況應該用forEach
處理流的方法分為惰性求值和及早求值(這兩個概念不在此展開了),對流的處理通常包括一系列惰性求知加上一個及早求值;流遇到及早求值的時候,才會真正去遍歷和執行
java8流中所有的操作都是蓄而不發的,只有執行foreach,collect等終結操作時,流的操作才會執行。
而且流內部會自動進行優化,只要得到想要的解決就不會繼續進行計算了。
peek是個中間操作,它提供了一種對流中所有元素操作的方法,而不會把這個流消費掉(foreach會把流消費掉),然後你可以繼續對流進行其他操作。
stream 分 中間操作 和 終端操作, (foreach, collect count)屬於終端操作;
peek: 生成一個包含原Stream的所有元素的新Stream,同時會提供一個消費函式(Consumer例項),新Stream每個元素被消費的時候都會執行給定的消費函式;
相關文章
- Java 8 Stream Api 中的 peek 操作JavaAPI
- logcat 引數的一些疑惑,求大佬指教GC
- 關於barryvdh/laravel-ide-helper的一些疑惑LaravelIDE
- java裡的一些hash方法Java
- Java8中Stream 的一些用法Java
- 讓人疑惑的Java程式碼 – Java那些事兒Java
- [20191001]關於oracle number型別的一些疑惑.txtOracle型別
- java中用到的一些公用方法Java
- C# peek()的用法C#
- Stream中的Peek操作
- c3p0使用過程中的一些疑惑
- Java8——方法引用Java
- Java8 常用方法Java
- Java8 預設方法Java
- java8(二)方法引用Java
- Java 8 介面裡的預設方法特性Java
- 在java的繼承中你是否有這樣的疑惑?Java繼承
- Java 8 新特性之方法引用Java
- js關於this的疑惑JS
- [20180619]oradebug peek.txt
- 疑惑求解
- Java類方法(定義一個工具類,儲存一些常用的方法)Java
- java8 新特性之方法引用Java
- PHP8的一些新特性之構造方法屬性提升PHP構造方法
- PHP8的一些新特性之新增三個實用的字串方法PHP字串
- svg 使用中的疑惑點SVG
- [20180625]oradebug peek 2.txt
- Laravel 8 的一些新特性Laravel
- 一些小的方法工具
- 使用java8的方法引用替換硬編碼Java
- 聊一聊Java8中map的putIfAbsent,computeIfAbsent 方法Java
- java8 新特性之預設方法Java
- java 程式設計常混淆的一些屬性,方法,工具類Java程式設計
- java8介面的靜態方法和預設方法Java
- Docker拉取映象時的疑惑Docker
- 使用Java8改造出來的模板方法真的是yydsJava
- java8的新特性之lambda表示式和方法引用Java
- 收集的一些小方法