Java8新特性,Stream入門(mén)詳解,豐富案例等你細(xì)品
JDK8的重要更新除去Lambda之外還有Stream,兩者結(jié)合使用為操作和計(jì)算數(shù)據(jù)提供了極大的便利。
本篇文章并不打算長(zhǎng)篇大論,文章過(guò)長(zhǎng)會(huì)閱讀疲勞,Stream也并不是一兩篇文章可以介紹清楚的,本篇主要介紹Stream的簡(jiǎn)單理論加上案例來(lái)體會(huì)一下Stream的作用,便利和魅力,后續(xù)文章會(huì)系統(tǒng)講解Stream體系!
Stream是什么
Stream就是【流】的意思,與 java.io包中的輸入流,輸出流是兩個(gè)不同的概念
Stream流是JDK8新增用來(lái)處理集合、數(shù)組、文件等數(shù)據(jù),借助Lambda表達(dá)式,極大提高編程效率和程序可讀性,同時(shí)擁有串行和并行兩種數(shù)據(jù)處理模式,并行模式可以充分利用多核CPU性能,通過(guò) fork/join 方式拆解任務(wù)加速處理。
Stream好處
- 函數(shù)式編程:讓Java原本臃腫的代碼變的簡(jiǎn)潔,這當(dāng)然是需要配合Lambda實(shí)現(xiàn)
- 高效的并行處理機(jī)制,比之前的for循環(huán)加if...else,挨個(gè)元素處理速度要快上許多
- 具有多種數(shù)據(jù)的處理實(shí)現(xiàn),比如篩選,去重,轉(zhuǎn)換,查詢(xún),遍歷等內(nèi)置操作
Stream特點(diǎn)
- 流與集合、數(shù)組、文件不同,不是數(shù)據(jù)結(jié)構(gòu),不存儲(chǔ)數(shù)據(jù),目的是處理數(shù)據(jù),將處理結(jié)果返回或者轉(zhuǎn)換
- 流在計(jì)算數(shù)據(jù)時(shí),如果需要使用到集合中元素,會(huì)取出使用,并不修改源數(shù)據(jù),流只使用數(shù)據(jù)一次
- 支持延遲計(jì)算,只有等到執(zhí)行終止操作時(shí)才會(huì)執(zhí)行計(jì)算,可以降低不必要的CPU資源浪費(fèi)
Stream操作分類(lèi)
- 創(chuàng)建流:可以通過(guò)集合、數(shù)組、IO資源、Stream的構(gòu)造函數(shù)創(chuàng)建
- 中間操作:對(duì)數(shù)據(jù)的計(jì)算操作,比如篩選,去重,轉(zhuǎn)換等操作,一個(gè)中間操作返回一個(gè)新的Stream,來(lái)支持連續(xù)計(jì)算
- 終止操作:每個(gè)流只能有一次終止操作,終止之后流無(wú)法使用,會(huì)產(chǎn)生一個(gè)計(jì)算結(jié)果,可以根據(jù)需求轉(zhuǎn)換為想要的結(jié)果類(lèi)型
概念先不說(shuō)那么多,免得云里霧里,接下來(lái)我們直接通過(guò)案例來(lái)使用Stream對(duì)集合的操作
案例:
- 獲取運(yùn)費(fèi)大于5000元的運(yùn)單,并放到新集合中
- 將推薦運(yùn)單按照運(yùn)費(fèi)從高到低排序
- 統(tǒng)計(jì)最高運(yùn)費(fèi),最低運(yùn)費(fèi),平均運(yùn)費(fèi)
- 將運(yùn)單按照運(yùn)費(fèi)從高到低排序,相同者按照距離從高到低排序
- 將運(yùn)單按貨物類(lèi)型分類(lèi),將運(yùn)單按貨物類(lèi)型和目的地分類(lèi),將運(yùn)單按照運(yùn)費(fèi)是否高于5000元分為兩部分
接下來(lái)通過(guò)傳統(tǒng)方式和Stream兩種分別實(shí)現(xiàn),對(duì)比不同
提前準(zhǔn)備:
1、獲取運(yùn)費(fèi)大于5000元的運(yùn)單,并放到新集合中
運(yùn)行結(jié)果:
解釋?zhuān)?/strong>
- filter():方法就是中間操作,意為過(guò)濾符合條件的數(shù)據(jù),但是這個(gè)數(shù)據(jù)你還不使用,就先不執(zhí)行
- collect():方法是終結(jié)操作,意為要將Stream的計(jì)算結(jié)果轉(zhuǎn)換為一個(gè)List集合,Stream認(rèn)為你要用計(jì)算結(jié)果了,所以會(huì)執(zhí)行計(jì)算,之后保存結(jié)果到新的集合中
- 計(jì)算過(guò)程Stream中是不存儲(chǔ)數(shù)據(jù)的,沒(méi)有獲取數(shù)據(jù)的方法
2、將推薦運(yùn)單按照運(yùn)費(fèi)從高到低排序
運(yùn)行結(jié)果:
3、統(tǒng)計(jì)最高運(yùn)費(fèi),最低運(yùn)費(fèi),平均運(yùn)費(fèi)
運(yùn)行截圖:
4、將運(yùn)單按貨物類(lèi)型分類(lèi),將運(yùn)單按貨物類(lèi)型和目的地分類(lèi),將運(yùn)單按照運(yùn)費(fèi)是否高于5000元分為兩部分
運(yùn)行截圖:
總結(jié)
- Stream的概念、好處、特點(diǎn)和操作分類(lèi)
- Stream操作集合案例,體會(huì)便利之處
- 案例自己寫(xiě)幾遍,再觀察自己的項(xiàng)目中哪里可以使用Stream替換