不好意思,最近刷小視頻刷的有點上頭
看到這圖就不自覺的要來一句:"臥槽,無情"
好了,我要開始正經了
JAVA 8 已經推出有一段時間了, 相比之前, 我們操作集合的方式應該是這樣?
這樣?
或者是這樣?
OK, 現在相信你看到這樣的遍歷方式可能也會吐槽一番
Stream 是用函式式編程方式在集合類上進行復雜操作的工具,其集成了Java 8中的眾多新特性之一的聚合操作,開發者可以更容易地使用Lambda運算式,并且更方便地實作對集合的查找、遍歷、過濾以及常見計算等本篇只舉例list和map, 為了便于理解, 我們先創建一個資料類
PS:為了解決螢屏空間, 注釋不標準, 請忽略
首先我們先操作List
遍歷所有人員的名字
2.過濾年齡大于12的
3.過濾年齡大于12的總人數
4.根據年齡排序
5.獲得年齡最小的
6.年齡最大的
7.將所有的名字列印出來并用逗號隔開
8.所有人年齡的總和
9.關于統計類 IntSummaryStatistics
-------------我是一條紅色的分界線-----------
關于Map中Stram的操作
1.list轉map
2.在轉換程序中, key重復的情況的處理方式
(key1,key2) -> key2是一種運算式, 表示轉換map時,如果有兩個相同的key,
則取后面的key2替換前面的key1,key1,key2兩個關鍵字可以隨意修改.
3.key重復時,將前面的value和后面的value相加
小結:
先說下Stream的優勢:它是java對集合操作的優化,相較于迭代器,使用Stream的速度非常快,并且它支持并行方式處理集合中的資料,默認情況能充分利用cpu的資源,同時支持函式式編程,代碼非常簡潔,
Stream是一種用來計算資料的流,它本身并沒有存盤資料,你可以認為它是對資料源的一個映射或者視圖,
它的作業流程是:獲取資料源->進行一次或多次邏輯轉換操作->進行歸約操作形成新的流(最后可以將流轉換成集合),
Stream的特性
1.中間操作惰性執行:一個流后面可以跟隨0到多個中間操作,主要目的是打開流,并沒有真正的去計算,而是做出某種程度的資料映射/過濾,然后回傳一個新的流,交給下一個操作使用,這類操作都是惰性化的(lazy),就是說,僅僅呼叫到這類方法,并沒有真正開始流的遍歷,并沒有消耗資源,
還有多個中間操作的話,這里的時間復雜度并不是n個for回圈,轉換操作都是 lazy 的,多個轉換操作只會在 Terminal 操作的時候融合起來,一次回圈完成,可以這樣簡單的理解,Stream 里有個操作函式的集合,每次轉換操作就是把轉換函式放入這個集合中,在Terminal操作的時候回圈 Stream 對應的集合,然后對每個元素執行所有的函式,
2.流的末端操作只能有一次:當這個操作執行后,流就被使用“光”了,無法再被操作,所以這必定是流的最后一個操作,之后如果想要操作就必須新打開流,
關于流被關閉不能再操作的例外:
這里曾經遇到過一個錯誤:stream has already been operated upon or closed
意思是流已經被關閉了,這是因為當我們使用末端操作之后,流就被關閉了,無法再次被呼叫,如果我們想重復呼叫,只能重新打開一個新的流.
OK, 到此, 本文暫時告一段落, 之后的代碼中會大量體現stream和lambda運算式的代碼, 希望大家持續關注
下一篇, 將給大家帶來一個福利插件, 希望關注
原創:微微藍

想要提升自己,作業中遇到的問題,更多JAVA技術相關文章,微信掃一掃關注作者公眾號
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/5124.html
標籤:其他
下一篇:git commit vim報錯
