新特性里面為什么要加入流Steam()
集合是Java中使用最多的API,幾乎每一個Java程序都會制造和處理集合。集合對於很多程序都是必須的,但是如果一個集合進行,分組,排序,篩選,過濾...這些操作,會感到非常的難受,所以我們在連接數據庫,處理數據時,數據能在sql中處理就在sql中處理,不能的就在java程序中處理,最后沒有辦法了才在頁面中處理。
這個為什么呢?因為使用sql語句中處理數據,真的非常的簡單。如果把數據取出來,在程序中用集合處理,用循環會非常的麻煩。所以java在Java8里面加入了Steam(),為了就是處理集合的時候,就象寫sql語句一樣簡單。
Stream() 流
Stream流就是一種類似sql語句的方式來操作集合,可以以一種更加直觀的方式對集合進行運算和表達式的高階抽象。可以極大的提高效率,並且寫出高質量的代碼。 為什么說是流呢? 是因為它是把集合抽象成了一根管子內的水一樣,可以進行過濾,處理,排序...等等操作。元素在經過中間操作以后,最后有終端操作來進行收集,可以變成你想要的任何類型的數據。比如:收集成 List,Set,Map,Array...
創建Stream()流的幾種方式
- 通過Collection()類的Stream()來創建串行流
- 通過Collection()類的parallelStream()來創建並行流,可以非常簡單的利用多核資源
- 通過Arrays類中的Stream()方法來獲取流
- 通過無限流 >>
操作的實例: Java8 新特性 Stream 練習實例
中間操作:有狀態操作
中間操作,就是把數據處理成自己想要的類型,並且有狀態操作,是在所有的數據基礎上進行操作的。比如dictinct(去重),sorted(排序)....
所有的有狀態操作:
去重 distinct
跳過 skip
截斷 limit
排序 sorted
中間操作:無狀態操作
中間無狀態操作,可以在單個對單個的數據進行處理。比如:filter(過濾)一個元素的時候,也可以判斷,比如map(映射)...
過濾 filter
映射 map
扁夾化 flatMap
遍厲 peek
終端操作:短路
把經過中間操作處理過的值收集起來,短路的意思是當符合條件的時候,直接結束流。比如說:findFirst(查找首個)只要有第一個就結束流。
匹配所有 allMatch
任意匹配 anymMatch
不匹配 noneMatch
查找首個 findFirst
查找任意 findAny
終端操作:非短路
非短路終端操作:必須把所有的元素都過一遍之后才會結束流。比如說:forEach,必須把所有的元素都循環一遍之后才會結束。
遍厲 forEach
歸約 reduce
最大值 max
最小值 min
聚合 collect
計數 count
細節決定成敗!
個人愚見,如有不對,懇請扶正!
