免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
手把手帶你體驗(yàn)Stream流

前言

只有光頭才能變強(qiáng)。

相信也有不少的同學(xué)想要知道:Lambda表達(dá)式在工作中哪個(gè)場(chǎng)景會(huì)用得比較多?跟Lambda搭邊的,使用Stream流會(huì)比較多

一般人第一次看Stream流的代碼,都會(huì)有點(diǎn)看不懂(它的代碼看起來(lái)好像就不是寫Java一樣.),希望這篇文章能帶大家入個(gè)門

一、體驗(yàn)Stream流

大家在自學(xué)時(shí),大多數(shù)會(huì)學(xué)過(guò)一個(gè)程序:算出從數(shù)組元素的和,當(dāng)時(shí)我們是怎么寫的?一般來(lái)說(shuō)是這樣的:

publicstaticvoidmain(String[]args){int[]nums={1,2,3};intsum=0;for(inti:nums){sum+=i;}System.out.println("結(jié)果為:"+sum);}

如果我們使用Stream流的話,可以這樣:

publicstaticvoidmain(String[]args){int[]nums={1,2,3};intsum2=IntStream.of(nums).sum();System.out.println("結(jié)果為:"+sum2);}

代碼量上可以明顯看出,用Stream流的方式會(huì)少一些。

我理解的Stream流編程就是:某些場(chǎng)景會(huì)經(jīng)常用到操作(求和/去重/過(guò)濾….等等),已經(jīng)封裝好API給你了,你自己別寫了,調(diào)我給你提供的API就好了

1.1 支持并發(fā)

回到我們最原始的代碼:

publicstaticvoidmain(String[]args){int[]nums={1,2,3};intsum=0;for(inti:nums){sum+=i;}System.out.println("結(jié)果為:"+sum);}

如果我們想要for循環(huán)的內(nèi)部支持并發(fā)的話,顯然不太好去寫。但使用Stream流的方式,調(diào)用一個(gè)方法就可以支持并發(fā)(parallel):

publicstaticvoidmain(String[]args){int[]nums={1,2,3};intsum2=IntStream.of(nums).parallel().sum();System.out.println("結(jié)果為:"+sum2);}

優(yōu)點(diǎn):調(diào)API肯定是比自己寫的代碼量要少。

缺點(diǎn):不方便調(diào)試

為什么要使用Stream流在我看來(lái)就是以上兩個(gè)原因:

  • 方便并發(fā)

  • 代碼量少(直接調(diào)用API)

二、如何使用Stream流?

Stream繼承結(jié)構(gòu)圖

使用Stream流分為三步:

  1. 創(chuàng)建Stream流

  2. 通過(guò)Stream流對(duì)象執(zhí)行中間操作

  3. 執(zhí)行最終操作,得到結(jié)果

三步走

2.1 創(chuàng)建流

創(chuàng)建流我們最常用的就是從集合中創(chuàng)建出流

/***返回的都是流對(duì)象*@paramargs*/publicstaticvoidmain(String[]args){List<String>list=newArrayList<>();//從集合創(chuàng)建Stream<String>stream=list.stream();Stream<String>stream1=list.parallelStream();//從數(shù)組創(chuàng)建IntStreamstream2=Arrays.stream(newint[]{2,3,5});//創(chuàng)建數(shù)字流IntStreamintStream=IntStream.of(1,2,3);//使用random創(chuàng)建IntStreamlimit=newRandom().ints().limit(10);}

2.2 執(zhí)行中間操作

怎么理解中間操作?意思是這樣的:在上面我們已經(jīng)能創(chuàng)建出Stream了,我們是對(duì)Stream進(jìn)行操作,對(duì)Stream操作返回完返回的還是Stream,那么我們稱這個(gè)操作為中間操作。

中間操作 解釋

比如,我們現(xiàn)在有個(gè)字符串my name is 007,代碼如下:

Stringstr="mynameis007";Stream.of(str.split("")).filter(s->s.length()>2).map(s->s.length()).forEach(System.out::println);

分解:

1、從字符串?dāng)?shù)組創(chuàng)建出流對(duì)象:

Stream<String>split=Stream.of(str.split(""));

2、通過(guò)流對(duì)象的API執(zhí)行中間操作(filter),返回的還是流對(duì)象:

Stream<String>filterStream=split.filter(s->s.length()>2);

3、通過(guò)返回的流對(duì)象再執(zhí)行中間操作(map),返回的還是流對(duì)象:

Stream<Integer>integerStream=filterStream.map(s->s.length());

因?yàn)橹虚g操作返回的都是流對(duì)象,所以我們可以鏈?zhǔn)秸{(diào)用。

注意:Stream上的操作并不會(huì)立即執(zhí)行,只有等到用戶真正需要結(jié)果的時(shí)候才會(huì)執(zhí)行(惰性求值)。

比如說(shuō),peek()是一個(gè)中間操作,返回的是Stream流對(duì)象,只要它不執(zhí)行最終的操作,這個(gè)Stream是不會(huì)執(zhí)行的。

Stringstr="mynameis007";Stream.of(str.split("")).peek(System.out::println);//不會(huì)有信息打印

2.3 執(zhí)行最終操作

最終操作返回的不再是Stream對(duì)象,調(diào)用了最終操作的方法,Stream才會(huì)執(zhí)行。還是以上面的例子為例:

Stringstr="mynameis007";Stream.of(str.split("")).peek(System.out::println).forEach(System.out::println)

這次我們加入了最終操作,所以這次的Stream流會(huì)被執(zhí)行,由于中間操作和最終操作都是執(zhí)行打印,所以會(huì)看到兩次打印:

結(jié)果圖

至于中間操作和最終操作怎么區(qū)分,我們以返回值來(lái)看就行了。中間操作返回的是Stream實(shí)例對(duì)象,最終操作返回的不是Stream實(shí)例對(duì)象:

Stream接口的方法

最后

這篇文章主要跟大家一起初步認(rèn)識(shí)一下Stream流,至于中間操作、最終操作的API講解我就不寫了(網(wǎng)上的教程也很多)

使用Stream的原因我認(rèn)為有兩個(gè):

  1. JDK庫(kù)提供現(xiàn)有的API,代碼寫起來(lái)簡(jiǎn)潔優(yōu)化

  2. 方便并發(fā)。大家可以記住一個(gè)結(jié)論:在多核情況下,可以使用并行Stream API來(lái)發(fā)揮多核優(yōu)勢(shì)。在單核的情況下,我們自己寫的for性能不比Stream API 差多少

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
java程序設(shè)計(jì)試題2
JAVA經(jīng)典算法案例
《Java語(yǔ)言程序設(shè)計(jì)基礎(chǔ)教程》參考答案
JavaSE23-函數(shù)式接口&Stream流
2.4 數(shù)組
Java8 Stream:2萬(wàn)字20個(gè)實(shí)例,玩轉(zhuǎn)集合的篩選、歸約、分組、聚合
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服