經過前面章節的學習,咱們應該明白了Stream管道流的基本操做。咱們來回顧一下:vue
看下面的腦圖,能夠有更清晰的理解:java
其實在程序員編程中,常常會接觸到「有狀態」,「無狀態」,絕大部分的人都比較蒙。並且在不一樣的場景下,「狀態」這個詞的含義彷佛有所不一樣。可是「萬變不離其宗」,理解「狀態」這個詞在編程領域的含義,筆者教給你們幾個關鍵點:程序員
是否是更蒙了?舉個例子,你就明白了web
回到咱們的Stream管道流redis
List<String> limitN = Stream.of("Monkey", "Lion", "Giraffe", "Lemur") .limit(2) .collect(Collectors.toList()); List<String> skipN = Stream.of("Monkey", "Lion", "Giraffe", "Lemur") .skip(2) .collect(Collectors.toList());
咱們還可使用distinct方法對管道中的元素去重,涉及到去重就必定涉及到元素之間的比較,distinct方法時調用Object的equals方法進行對象的比較的,若是你有本身的比較規則,能夠重寫equals方法。spring
List<String> uniqueAnimals = Stream.of("Monkey", "Lion", "Giraffe", "Lemur", "Lion") .distinct() .collect(Collectors.toList());
上面代碼去重以後的結果是: ["Monkey", "Lion", "Giraffe", "Lemur"]vuex
默認的狀況下,sorted是按照字母的天然順序進行排序。以下代碼的排序結果是:[Giraffe, Lemur, Lion, Monkey],字數按順序G在L前面,L在M前面。第一位沒法區分順序,就比較第二位字母。編程
List<String> alphabeticOrder = Stream.of("Monkey", "Lion", "Giraffe", "Lemur") .sorted() .collect(Collectors.toList());
排序咱們後面還會給你們詳細的講一講,因此這裏暫時只作一個瞭解。後端
一般狀況下,有狀態和無狀態操做不須要咱們去關心。除非?:你使用了並行操做。數組
仍是用班級按身高排隊爲例:班級有一我的負責排序,這個排序結果最後就會是正確的。那若是有2個、3我的負責按大小個排隊呢?最後可能就亂套了。一我的只能保證本身排序的人的順序,他沒法保證其餘人的排隊順序。
Stream.of("Monkey", "Lion", "Giraffe", "Lemur", "Lion") .parallel() .forEach(System.out::println);
若是數據量比較小的狀況下,不太能觀察到,數據量大的話,就能觀察到數據順序是沒法保證的。
Monkey Lion Lemur Giraffe Lion
一般狀況下,parallel()可以很好的利用CPU的多核處理器,達到更好的執行效率和性能,建議使用。可是有些特殊的狀況下,parallel並不適合:深刻了解請看這篇文章:
https://blog.oio.de/2016/01/22/parallel-stream-processing-in-java-8-performance-of-sequential-vs-parallel-stream-processing/
該文章中幾個觀點,說明並行操做的適用場景:
以爲對您有幫助的話,幫我點贊、分享!您的支持是我不竭的創做動力! 。另外,筆者最近一段時間輸出了以下的精品內容,期待您的關注。