一、Java 8引入了全新的Stream API。這裏的Stream和I/O流不一樣,它更像具備Iterable的集合類,但行爲和集合類又有所不一樣。編程
二、stream是對集合對象功能的加強,它專一於對集合對象進行各類很是便利、高效的聚合操做,或者大批量數據操做。bash
三、只要給出須要對其包含的元素執行什麼操做,好比 「過濾掉長度大於 10 的字符串」、「獲取每一個字符串的首字母」等,Stream 會隱式地在內部進行遍歷,作出相應的數據轉換。數據結構
一、函數式編程帶來的好處尤其明顯。這種代碼更多地表達了業務邏輯的意圖,而不是它的實現機制。易讀的代碼也易於維護、更可靠、更不容易出錯。架構
二、高端併發
複製代碼
一、遍歷數據並檢查其中的元素時使用。app
二、filter接受一個函數做爲參數,該函數用Lambda表達式表示。分佈式
二、比較經常使用函數式編程
三、並且很簡單函數
一、顧名思義,跟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只能操做第一層。
一、感受相似遞歸
二、數字(字符串)累加
三、我的沒咋用過
一、collect在流中生成列表,map,等經常使用的數據結構
二、toList()
三、toSet()
四、toMap()
五、自定義
一、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