前言
相信也有不少的同學(xué)想要知道:Lambda表達(dá)式在工作中哪個(gè)場(chǎng)景會(huì)用得比較多?跟Lambda搭邊的,使用Stream流會(huì)比較多 一般人第一次看Stream流的代碼,都會(huì)有點(diǎn)看不懂(它的代碼看起來好像就不是寫Java一樣.),希望這篇文章能帶大家入個(gè)門 一、體驗(yàn)Stream流 大家在自學(xué)時(shí),大多數(shù)會(huì)學(xué)過一個(gè)程序:算出從數(shù)組元素的和,當(dāng)時(shí)我們是怎么寫的?一般來說是這樣的:
如果我們使用Stream流的話,可以這樣:
從代碼量上可以明顯看出,用Stream流的方式會(huì)少一些。 我理解的Stream流編程就是:某些場(chǎng)景會(huì)經(jīng)常用到操作(求和/去重/過濾….等等),已經(jīng)封裝好API給你了,你自己別寫了,調(diào)我給你提供的API就好了。 1.1 支持并發(fā) 回到我們最原始的代碼:
如果我們想要for循環(huán)的內(nèi)部支持并發(fā)的話,顯然不太好去寫。但使用Stream流的方式,調(diào)用一個(gè)方法就可以支持并發(fā)(parallel):
為什么要使用Stream流在我看來就是以上兩個(gè)原因:
二、如何使用Stream流? Stream繼承結(jié)構(gòu)圖 使用Stream流分為三步:
三步走 2.1 創(chuàng)建流 創(chuàng)建流我們最常用的就是從集合中創(chuàng)建出流
2.2 執(zhí)行中間操作 怎么理解中間操作?意思是這樣的:在上面我們已經(jīng)能創(chuàng)建出Stream了,我們是對(duì)Stream進(jìn)行操作,對(duì)Stream操作返回完返回的還是Stream,那么我們稱這個(gè)操作為中間操作。 中間操作 解釋 比如,我們現(xiàn)在有個(gè)字符串my name is 007,代碼如下:
分解: 1、從字符串?dāng)?shù)組創(chuàng)建出流對(duì)象:
2、通過流對(duì)象的API執(zhí)行中間操作(filter),返回的還是流對(duì)象:
3、通過返回的流對(duì)象再執(zhí)行中間操作(map),返回的還是流對(duì)象:
因?yàn)橹虚g操作返回的都是流對(duì)象,所以我們可以鏈?zhǔn)秸{(diào)用。 注意:Stream上的操作并不會(huì)立即執(zhí)行,只有等到用戶真正需要結(jié)果的時(shí)候才會(huì)執(zhí)行(惰性求值)。 比如說,peek()是一個(gè)中間操作,返回的是Stream流對(duì)象,只要它不執(zhí)行最終的操作,這個(gè)Stream是不會(huì)執(zhí)行的。
2.3 執(zhí)行最終操作 最終操作返回的不再是Stream對(duì)象,調(diào)用了最終操作的方法,Stream才會(huì)執(zhí)行。還是以上面的例子為例:
這次我們加入了最終操作,所以這次的Stream流會(huì)被執(zhí)行,由于中間操作和最終操作都是執(zhí)行打印,所以會(huì)看到兩次打?。?/p> 結(jié)果圖 至于中間操作和最終操作怎么區(qū)分,我們以返回值來看就行了。中間操作返回的是Stream實(shí)例對(duì)象,最終操作返回的不是Stream實(shí)例對(duì)象: Stream接口的方法 最后 這篇文章主要跟大家一起初步認(rèn)識(shí)一下Stream流,至于中間操作、最終操作的API講解我就不寫了(網(wǎng)上的教程也很多) 使用Stream的原因我認(rèn)為有兩個(gè):
|
|