成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

dingda / 2327人閱讀

摘要:需要注意的是很多流操作本身就會(huì)返回一個(gè)流,所以多個(gè)操作可以直接連接起來(lái),如下圖這樣,操作可以進(jìn)行鏈?zhǔn)秸{(diào)用,并且并行流還可以實(shí)現(xiàn)數(shù)據(jù)流并行處理操作。為集合創(chuàng)建并行流。

上一篇文章,小樂(lè)給大家介紹了《Java8新特性之方法引用》,下面接下來(lái)小樂(lè)將會(huì)給大家介紹Java8新特性之Stream,稱之為流,本篇文章為上半部分。

1、什么是流?

Java Se中對(duì)于流的操作有輸入輸出IO流,而Java8中引入的Stream 屬于Java API中的一個(gè)新成員,它允許你以聲明性方式處理數(shù)據(jù)集合,Stream 使用一種類似 SQL 語(yǔ)句從數(shù)據(jù)庫(kù)查詢數(shù)據(jù)的直觀方式來(lái)提供一種對(duì) Java 集合運(yùn)算和表達(dá)的高階抽象。 注意這里的流操作可以看做是對(duì)集合數(shù)據(jù)的處理。

簡(jiǎn)單來(lái)說(shuō),流是一種數(shù)據(jù)渠道,用于操作數(shù)據(jù)源(集合、數(shù)組)所生產(chǎn)的元素序列。

元素序列 :就像集合一樣,流也提供了一個(gè)接口,可以訪問(wèn)特定元素類型的一組有序值。

源:流會(huì)使用一個(gè)提供數(shù)據(jù)的源,如集合、數(shù)組或輸入/輸出資源。 請(qǐng)注意,從有序集 合生成流時(shí)會(huì)保留原有的順序。由列表生成的流,其元素順序與列表一致

數(shù)據(jù)處理操作:流的數(shù)據(jù)處理功能支持類似于數(shù)據(jù)庫(kù)的操作,以及函數(shù)式編程語(yǔ)言中 的常用操作,如filter、 map、 reduce、 find、 match、 sort等。流操作可以順序執(zhí) 行,也可并行執(zhí)行。

流水線:很多流操作本身會(huì)返回一個(gè)流,這樣多個(gè)操作就可以鏈接起來(lái),形成一個(gè)大 的流水線。

內(nèi)部迭代:與使用迭代器顯式迭代的集合不同,流的迭代操作是在背后進(jìn)行的。

2、流操作


整個(gè)流操作就是一條流水線,將元素放在流水線上一個(gè)個(gè)地進(jìn)行處理。需要注意的是:很多流操作本身就會(huì)返回一個(gè)流,所以多個(gè)操作可以直接連接起來(lái), 如下圖這樣,操作可以進(jìn)行鏈?zhǔn)秸{(diào)用,并且并行流還可以實(shí)現(xiàn)數(shù)據(jù)流并行處理操作。

3、流與集合 3.1、計(jì)算的時(shí)機(jī)

Stream 和集合的其中一個(gè)差異在于什么時(shí)候進(jìn)行計(jì)算,集合,它會(huì)包含當(dāng)前數(shù)據(jù)結(jié)構(gòu)中所有的值,你可以隨時(shí)增刪,但是集合里面的元素毫無(wú)疑問(wèn)地都是已經(jīng)計(jì)算好了的。 流則是按需計(jì)算,按照使用者的需要計(jì)算數(shù)據(jù),你可以想象我們通過(guò)搜索引擎進(jìn)行搜索,搜索出來(lái)的條目并不是全部呈現(xiàn)出來(lái)的,而且先顯示最符合的前 10 條或者前 20 條,只有在點(diǎn)擊 “下一頁(yè)” 的時(shí)候,才會(huì)再輸出新的 10 條。

5.3.2、外部迭代與內(nèi)部迭代

把集合比作一個(gè)工廠的倉(cāng)庫(kù),一開(kāi)始工廠比較落后,要對(duì)貨物作什么修改,只能工人親自走進(jìn)倉(cāng)庫(kù)對(duì)貨物進(jìn)行處理,有時(shí)候還要將處理后的貨物放到一個(gè)新的倉(cāng)庫(kù)里面。在這個(gè)時(shí)期,我們需要親自去做迭代,一個(gè)個(gè)地找到需要的貨物,并進(jìn)行處理,這叫做外部迭代。

后來(lái)工廠發(fā)展了起來(lái),配備了流水線作業(yè),只要根據(jù)需求設(shè)計(jì)出相應(yīng)的流水線,然后工人只要把貨物放到流水線上,就可以等著接收成果了,而且流水線還可以根據(jù)要求直接把貨物輸送到相應(yīng)的倉(cāng)庫(kù)。這就叫做內(nèi)部迭代,流水線已經(jīng)幫你把迭代給完成了,你只需要說(shuō)要干什么就可以了(即設(shè)計(jì)出合理的流水線)。

Java 8 引入 Stream 很大程度是因?yàn)?,流的?nèi)部迭代可以自動(dòng)選擇一種合適你硬件的數(shù)據(jù)表示和并行實(shí)現(xiàn)。

4、創(chuàng)建流

在 Java 8 中, 集合接口有兩個(gè)方法來(lái)生成流:

stream()?? 為集合創(chuàng)建串行流。

parallelStream()?? 為集合創(chuàng)建并行流。

示例代碼如下:

public static void main(String[] args) {
    /**
         * 定義集合l1 并為集合創(chuàng)建串行流
         */
    List l1 = Arrays.asList("周星馳", "周杰倫", "周星星", "周潤(rùn)發(fā)");
    // 返回串行流
    l1.stream();
    // 返回并行流
    l1.parallelStream();
}

上述操作得到的流是通過(guò)原始數(shù)據(jù)轉(zhuǎn)換過(guò)來(lái)的流,除了這種流創(chuàng)建的基本操作外,對(duì)于流的創(chuàng)建還有以下幾種方式。

4.1、值創(chuàng)建流
Stream.of(T...) : Stream.of("aa", "bb") 生成流

//值創(chuàng)建流 生成一個(gè)字符串流
Stream stream = Stream.of("java8", "Spring", "SpringCloud");
stream.forEach(System.out::println);
4.2、數(shù)組創(chuàng)建流

根據(jù)參數(shù)的數(shù)組類型創(chuàng)建對(duì)應(yīng)的流。

Arrays.stream(T[ ])

Arrays.stream(int[ ])

Arrays.stream(double[ ])

Arrays.stream(long[ ])

 // 只取索引第 1 到第 2 位的:
     int[] a = {1, 2, 3, 4};
     Arrays.stream(a, 1, 3).forEach(System.out :: println);
4.3、文件生成流
//每個(gè)元素是給定文件的其中一行
Stream stream02 = Files.lines(Paths.get("data.txt"));
4.4、函數(shù)生成流

兩個(gè)方法:

iterate : 依次對(duì)每個(gè)新生成的值應(yīng)用函數(shù)

generate :接受一個(gè)函數(shù),生成一個(gè)新的值

 //生成流,首元素為 0,之后依次加 2
    Stream.iterate(0, n -> n + 2)
    //生成流,為 0 到 1 的隨機(jī)雙精度數(shù)
    Stream.generate(Math :: random)
    //生成流,元素全為 1
    Stream.generate(() -> 1)

上半部分就介紹到這里,下半部分將會(huì)給大家介紹流的中間操作和終止操作。請(qǐng)多關(guān)注!轉(zhuǎn)載請(qǐng)注明出處和作者。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/77489.html

相關(guān)文章

  • 樂(lè)字節(jié)-Java8特性Stream(下)

    摘要:歸約操作計(jì)算有效訂單總金額有效訂單總金額收集數(shù)據(jù)收集將流轉(zhuǎn)換為其他形式,方法作為終端操作,接收一個(gè)接口的實(shí)現(xiàn),用于給中元素做匯總的方法。 接上一篇:《Java8新特性之stream》,下面繼續(xù)接著講Stream 5、流的中間操作 常見(jiàn)的流的中間操作,歸為以下三大類:篩選和切片流操作、元素映射操作、元素排序操作:showImg(https://segmentfault.com/img/b...

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

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

    wenshi11019 評(píng)論0 收藏0
  • 樂(lè)字節(jié)-Java8核心特性實(shí)戰(zhàn)-接口默認(rèn)方法

    摘要:語(yǔ)法中接口可以包含實(shí)現(xiàn)方法,需要使用修飾,此類方法稱為默認(rèn)方法。核心特性接口默認(rèn)方法就介紹到這里了,后續(xù)小樂(lè)會(huì)繼續(xù)講述核心特性。 JAVA8已經(jīng)發(fā)布很久,是自java5(2004年發(fā)布)之后Oracle發(fā)布的最重要的一個(gè)版本。其中包括語(yǔ)言、編譯器、庫(kù)、工具和JVM等諸多方面的新特性,對(duì)于國(guó)內(nèi)外互聯(lián)網(wǎng)公司來(lái)說(shuō),Java8是以后技術(shù)開(kāi)發(fā)的趨勢(shì)。這里主要講解在開(kāi)發(fā)中幾個(gè)核心的新特性。(主要從...

    lbool 評(píng)論0 收藏0
  • 樂(lè)字節(jié)-Java8核心特性實(shí)戰(zhàn)函數(shù)式接口

    摘要:大家好,上一篇小樂(lè)給大家講述了樂(lè)字節(jié)核心特性表達(dá)式,點(diǎn)擊回顧。接下來(lái)繼續(xù)核心特性之函數(shù)式接口。感謝大家欣賞小樂(lè)帶來(lái)的核心特性之函數(shù)式接口,接下來(lái)還會(huì)更多核心技術(shù)講解,請(qǐng)關(guān)注樂(lè)字節(jié)如需要視頻課程,請(qǐng)搜索樂(lè)字節(jié)騰訊課堂 大家好,上一篇小樂(lè)給大家講述了《樂(lè)字節(jié)-Java8核心特性-Lambda表達(dá)式》,點(diǎn)擊回顧。接下來(lái)繼續(xù):Java8核心特性之函數(shù)式接口。 什么時(shí)候可以使用Lambda?通常...

    niceforbear 評(píng)論0 收藏0
  • 樂(lè)字節(jié)Java8核心特性實(shí)戰(zhàn)方法引用

    摘要:大家好,我是樂(lè)字節(jié)的小樂(lè),上一次我們說(shuō)到了核心特性之函數(shù)式接口,接下來(lái)我們繼續(xù)了解又一核心特性方法引用。方法引用是一種更簡(jiǎn)潔易懂的表達(dá)式。感謝光臨閱讀小樂(lè)的,敬請(qǐng)關(guān)注樂(lè)字節(jié)后續(xù)將繼續(xù)講述等前沿知識(shí)技術(shù)。 大家好,我是樂(lè)字節(jié)的小樂(lè),上一次我們說(shuō)到了Java8核心特性之函數(shù)式接口,接下來(lái)我們繼續(xù)了解Java8又一核心特性——方法引用。 showImg(https://segmentfaul...

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

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

0條評(píng)論

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