您好,登錄后才能下訂單哦!
本篇內容介紹了“Java8中Stream API的技巧有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Stream簡介
1、Java 8引入了全新的Stream API。這里的Stream和I/O流不同,它更像具有Iterable的集合類,但行為和集合類又有所不同。
2、stream是對集合對象功能的增強,它專注于對集合對象進行各種非常便利、高效的聚合操作,或者大批量數據操作。
3、只要給出需要對其包含的元素執行什么操作,比如 “過濾掉長度大于 10 的字符串”、“獲取每個字符串的首字母”等,Stream 會隱式地在內部進行遍歷,做出相應的數據轉換。
為什么要使用Stream
1、函數式編程帶來的好處尤為明顯。這種代碼更多地表達了業務邏輯的意圖,而不是它的實現機制。易讀的代碼也易于維護、更可靠、更不容易出錯。
2、高端
實例數據源
Filter
1、遍歷數據并檢查其中的元素時使用。
2、filter接受一個函數作為參數,該函數用Lambda表達式表示。
Map
1、map生成的是個一對一映射,for的作用
2、比較常用
3、而且很簡單
FlatMap
1、顧名思義,跟map差不多,更深層次的操作
2、但還是有區別的
3、map和flat返回值不同
4、Map 每個輸入元素,都按照規則轉換成為另外一個元素。
還有一些場景,是一對多映射關系的,這時需要 flatMap。
5、Map一對一
6、Flatmap一對多
7、map和flatMap的方法聲明是不一樣的
(1)
(2)
(3) map和flatMap的區別:我個人認為,flatMap的可以處理更深層次的數據,入參為多個list,結果可以返回為一個list,而map是一對一的,入參是多個list,結果返回必須是多個list。通俗的說,如果入參都是對象,那么flatMap可以操作對象里面的對象,而map只能操作***層。
Reduce
1、感覺類似遞歸
2、數字(字符串)累加
3、個人沒咋用過
Collect
1、collect在流中生成列表,map,等常用的數據結構
2、toList()
3、toSet()
4、toMap()
5、自定義
Optional
1、Optional 是為核心類庫新設計的一個數據類型,用來替換 null 值。
2、人們對原有的 null 值有很多抱怨,甚至連發明這一概念的Tony Hoare也是如此,他曾說這是自己的一個“價值連城的錯誤”
3、用處很廣,不光在lambda中,哪都能用
4、Optional.of(T),T為非空,否則初始化報錯
5、Optional.ofNullable(T),T為任意,可以為空
6、isPresent(),相當于 !=null
7、ifPresent(T), T可以是一段lambda表達式 ,或者其他代碼,非空則執行
并發
1、stream替換成parallelStream或 parallel
2、輸入流的大小并不是決定并行化是否會帶來速度提升的唯一因素,性能還會受到編寫代碼的方式和核的數量的影響
3、影響性能的五要素是:數據大小、源數據結構、值是否裝箱、可用的CPU核數量,以及處理每個元素所花的時間
調試
1、list.map.fiter.map.xx 為鏈式調用,最終調用collect(xx)返回結果
2、分惰性求值和及早求值
3、判斷一個操作是惰性求值還是及早求值很簡單:只需看它的返回值。如果返回值是 Stream,那么是惰性求值;如果返回值是另一個值或為空,那么就是及早求值。使用這些操作的理想方式就是形成一個惰性求值的鏈,***用一個及早求值的操作返回想要的結果。
4、通過peek可以查看每個值,同時能繼續操作流
“Java8中Stream API的技巧有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。