Java 8中Stream API的這些奇技淫巧!你都Get到了嗎?

Stream簡介

一、Java 8引入了全新的Stream API。這裏的Stream和I/O流不一樣,它更像具備Iterable的集合類,但行爲和集合類又有所不一樣。編程

二、stream是對集合對象功能的加強,它專一於對集合對象進行各類很是便利、高效的聚合操做,或者大批量數據操做。bash

三、只要給出須要對其包含的元素執行什麼操做,好比 「過濾掉長度大於 10 的字符串」、「獲取每一個字符串的首字母」等,Stream 會隱式地在內部進行遍歷,作出相應的數據轉換。數據結構

爲何要使用Stream

一、函數式編程帶來的好處尤其明顯。這種代碼更多地表達了業務邏輯的意圖,而不是它的實現機制。易讀的代碼也易於維護、更可靠、更不容易出錯。架構

二、高端併發

實例數據源
複製代碼

Filter

一、遍歷數據並檢查其中的元素時使用。app

二、filter接受一個函數做爲參數,該函數用Lambda表達式表示。分佈式

         

                        


Map
一、map生成的是個一對一映射,for的做用

二、比較經常使用函數式編程

三、並且很簡單函數

                


FlatMap

一、顧名思義,跟map差很少,更深層次的操做源碼分析

二、但仍是有區別的

三、map和flat返回值不一樣

四、Map 每一個輸入元素,都按照規則轉換成爲另一個元素。
還有一些場景,是一對多映射關係的,這時須要 flatMap。

五、Map一對一

六、Flatmap一對多

七、map和flatMap的方法聲明是不同的

(1) <r> Stream<r> map(Function mapper);

(2) <r> Stream<r> flatMap(Function> mapper);

(3) map和flatMap的區別:我我的認爲,flatMap的能夠處理更深層次的數據,入參爲多個list,結果能夠返回爲一個list,而map是一對一的,入參是多個list,結果返回必須是多個list。通俗的說,若是入參都是對象,那麼flatMap能夠操做對象裏面的對象,而map只能操做第一層。

 


Reduce

一、感受相似遞歸

二、數字(字符串)累加

三、我的沒咋用過


Collect

一、collect在流中生成列表,map,等經常使用的數據結構

二、toList()

三、toSet()

四、toMap()

五、自定義

                               


Optional

一、Optional 是爲核心類庫新設計的一個數據類型,用來替換 null 值。

二、人們對原有的 null 值有不少抱怨,甚至連發明這一律唸的Tony Hoare也是如此,他曾說這是本身的一個「價值連城的錯誤」

三、用處很廣,不光在lambda中,哪都能用

四、Optional.of(T),T爲非空,不然初始化報錯

五、Optional.ofNullable(T),T爲任意,能夠爲空

六、isPresent(),至關於 !=null

七、ifPresent(T), T能夠是一段lambda表達式 ,或者其餘代碼,非空則執行

                        


併發

一、stream替換成parallelStream或 parallel

二、輸入流的大小並非決定並行化是否會帶來速度提高的惟一因素,性能還會受到編寫代碼的方式和核的數量的影響

三、影響性能的五要素是:數據大小、源數據結構、值是否裝箱、可用的CPU核數量,以及處理每一個元素所花的時間

                            

調試

一、list.map.fiter.map.xx 爲鏈式調用,最終調用collect(xx)返回結果

二、分惰性求值和及早求值

三、判斷一個操做是惰性求值仍是及早求值很簡單:只需看它的返回值。若是返回值是 Stream,那麼是惰性求值;若是返回值是另外一個值或爲空,那麼就是及早求值。使用這些操做的理想方式就是造成一個惰性求值的鏈,最後用一個及早求值的操做返回想要的結果。

四、經過peek能夠查看每一個值,同時能繼續操做流


關注公衆號領資料

搜索公衆號【Java耕耘者】,回覆【Java】,便可獲取大量優質電子書和一份Java高級架構資料、Spring源碼分析、Dubbo、Redis、Netty、zookeeper、Spring cloud、分佈式等視頻資料

                           






                                                                                     來源:http://t.cn/AiQkQSD8

相關文章
相關標籤/搜索