国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java8的流(stream)操作

yacheng / 1650人閱讀

摘要:串行與并行可以分為串行與并行兩種,串行流和并行流差別就是單線程和多線程的執(zhí)行。返回串行流返回并行流和方法返回的都是類型的對(duì)象,說明它們?cè)诠δ艿氖褂蒙鲜菦]差別的。唯一的差別就是單線程和多線程的執(zhí)行。

Stream是什么

Stream是Java8中新加入的api,更準(zhǔn)確的說:

Java 8 中的 Stream 是對(duì)集合(Collection)對(duì)象功能的增強(qiáng),它專注于對(duì)集合對(duì)象進(jìn)行各種非常便利、高效的聚合操作,或者大批量數(shù)據(jù)操作 。Stream API 借助于同樣新出現(xiàn)的 Lambda 表達(dá)式,極大的提高編程效率和程序可讀性.

以前我們處理復(fù)雜的數(shù)據(jù)只能通過各種for循環(huán),不僅不美觀,而且時(shí)間長了以后可能自己都看不太明白以前的代碼了,但有Stream以后,通過filter,map,limit等等方法就可以使代碼更加簡潔并且更加語義化。

流機(jī)器(動(dòng)畫來自 Tagir Valeev)

Stream的效果就像上圖展示的它可以先把數(shù)據(jù)變成符合要求的樣子(map),吃掉不需要的東西(filter)然后得到需要的東西(collect)。

而關(guān)于如何使用,下面就用一個(gè)簡單的例子來說明。

Stream的使用

下面是一個(gè)簡單的示例代碼

List menu = ...

List lowCaloricDishesName = menu.stream()
    //篩選出卡路里大于400的
    .filter(d -> d.getCalories() < 400)
    //抽取名字屬性創(chuàng)建一個(gè)新的流
    .map(Dish::getName)
    //這個(gè)流按List類型返回
    .collect(toList());

在這段代碼 filtermap 操作被稱為中間操作,中間操作會(huì)返回一個(gè)新的流,而 collect 則被稱為終端操作只有終端操作才會(huì)讓整個(gè)流執(zhí)行并關(guān)閉。也就是說 每個(gè)流只能遍歷一次 ,因?yàn)閏ollect以后這個(gè)流就已經(jīng)關(guān)閉了。

List test = Arrays.asList("Java8", "In", "Action");
Stream s = title.stream();
s.forEach(System.out::println);
s.forEach(System.out::println);   // 代碼會(huì)拋出一個(gè)java.lang.IllegalStateException異常

想了解更多Stream的api可以查閱官方文檔。

串行與并行

Stream可以分為串行與并行兩種,串行流和并行流差別就是單線程和多線程的執(zhí)行。

default Stream stream() : 返回串行流

default Stream parallelStream() : 返回并行流

stream()和parallelStream()方法返回的都是java.util.stream.Stream類型的對(duì)象,說明它們?cè)诠δ艿氖褂蒙鲜菦]差別的。唯一的差別就是單線程和多線程的執(zhí)行。

性能問題

記得以前正好看過一篇關(guān)于Stream的性能的文章,在此就直接引用結(jié)論了

結(jié)果可以總結(jié)如下:

1.對(duì)于簡單操作,比如最簡單的遍歷,Stream串行API性能明顯差于顯示迭代,但并行的Stream API能夠發(fā)揮多核特性。
2.對(duì)于復(fù)雜操作,Stream串行API性能可以和手動(dòng)實(shí)現(xiàn)的效果匹敵,在并行執(zhí)行時(shí)Stream API效果遠(yuǎn)超手動(dòng)實(shí)現(xiàn)。

所以,如果出于性能考慮,1. 對(duì)于簡單操作推薦使用外部迭代手動(dòng)實(shí)現(xiàn),2. 對(duì)于復(fù)雜操作,推薦使用Stream API, 3. 在多核情況下,推薦使用并行Stream API來發(fā)揮多核優(yōu)勢,4.單核情況下不建議使用并行Stream API。

如果出于代碼簡潔性考慮,使用Stream API能夠?qū)懗龈痰拇a。即使是從性能方面說,盡可能的使用Stream API也另外一個(gè)優(yōu)勢,那就是只要Java Stream類庫做了升級(jí)優(yōu)化,代碼不用做任何修改就能享受到升級(jí)帶來的好處。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/74183.html

相關(guān)文章

  • 樂字節(jié)-Java8新特性之Stream流(上)

    摘要:需要注意的是很多流操作本身就會(huì)返回一個(gè)流,所以多個(gè)操作可以直接連接起來,如下圖這樣,操作可以進(jìn)行鏈?zhǔn)秸{(diào)用,并且并行流還可以實(shí)現(xiàn)數(shù)據(jù)流并行處理操作。為集合創(chuàng)建并行流。 上一篇文章,小樂給大家介紹了《Java8新特性之方法引用》,下面接下來小樂將會(huì)給大家介紹Java8新特性之Stream,稱之為流,本篇文章為上半部分。 1、什么是流? Java Se中對(duì)于流的操作有輸入輸出IO流,而Jav...

    dingda 評(píng)論0 收藏0
  • Java8實(shí)戰(zhàn)》-第四章讀書筆記(引入流Stream

    摘要:內(nèi)部迭代與使用迭代器顯式迭代的集合不同,流的迭代操作是在背后進(jìn)行的。流只能遍歷一次請(qǐng)注意,和迭代器類似,流只能遍歷一次。 流(Stream) 流是什么 流是Java API的新成員,它允許你以聲明性方式處理數(shù)據(jù)集合(通過查詢語句來表達(dá),而不是臨時(shí)編寫一個(gè)實(shí)現(xiàn))。就現(xiàn)在來說,你可以把它們看成遍歷數(shù)據(jù)集的高級(jí)迭代器。此外,流還可以透明地并行處理,你無需寫任何多線程代碼了!我會(huì)在后面的筆記中...

    _ivan 評(píng)論0 收藏0
  • 樂字節(jié)-Java8核心特性實(shí)戰(zhàn)之Stream(流)

    摘要:大家好,我是樂字節(jié)的小樂。需要注意的是很多流操作本身就會(huì)返回一個(gè)流,所以多個(gè)操作可以直接連接起來,如下圖這樣,操作可以進(jìn)行鏈?zhǔn)秸{(diào)用,并且并行流還可以實(shí)現(xiàn)數(shù)據(jù)流并行處理操作。為集合創(chuàng)建并行流。 大家好,我是樂字節(jié)的小樂。說起流,我們會(huì)聯(lián)想到手機(jī)、電腦組裝流水線,物流倉庫商品包裝流水線等等,如果把手機(jī) ,電腦,包裹看做最終結(jié)果的話,那么加工商品前的各種零部件就可以看做數(shù)據(jù)源,而中間一系列的...

    wenshi11019 評(píng)論0 收藏0
  • 用Java 8 的 Stream 來寫代碼,干凈優(yōu)雅!

    摘要:補(bǔ)充一點(diǎn)使用數(shù)值流可以避免計(jì)算過程中拆箱裝箱,提高性能。其目的主要是打開流,做出某種程度的數(shù)據(jù)映射過濾,然后返回一個(gè)新的流,交給下一個(gè)操作使用。終端操作的執(zhí)行,才會(huì)真正開始流的遍歷。 Java8的新特性主要是Lambda表達(dá)式和流,當(dāng)流和Lambda表達(dá)式結(jié)合起來一起使用時(shí),因?yàn)榱魃昝魇教幚頂?shù)據(jù)集合的特點(diǎn),可以讓代碼變得簡...

    wemall 評(píng)論0 收藏0
  • Java8實(shí)戰(zhàn)》-第五章讀書筆記(使用流Stream-01)

    摘要:跳過元素流還支持方法,返回一個(gè)扔掉了前個(gè)元素的流。歸約到目前為止,我們見到過的終端操作都是返回一個(gè)之類的或?qū)ο蟮取_@樣的查詢可以被歸類為歸約操作將流歸約成一個(gè)值。通過反復(fù)使用加法,你把一個(gè)數(shù)字列表歸約成了一個(gè)數(shù)字。 使用流 在上一篇的讀書筆記中,我們已經(jīng)看到了流讓你從外部迭代轉(zhuǎn)向內(nèi)部迭代。這樣,你就用不著寫下面這樣的代碼來顯式地管理數(shù)據(jù)集合的迭代(外部迭代)了: /** * 菜單 ...

    OldPanda 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<