java8 stream 做累加_Java8新特性之Stream(上)|乐字节
上次給大家介紹了Java8新特性之方法引用,大家可以點(diǎn)擊回顧下。接下來小樂繼續(xù)給大家?guī)鞪ava8新特性之Stream ,流是Java8最重要的內(nèi)容,小樂準(zhǔn)備分上下兩部分介紹,今天是上部。
5.1、什么是流?
Java Se中對(duì)于流的操作有輸入輸出IO流,而Java8中引入的Stream 屬于Java API中的一個(gè)新成員,它允許你以聲明性方式處理數(shù)據(jù)集合,Stream 使用一種類似 SQL 語句從數(shù)據(jù)庫查詢數(shù)據(jù)的直觀方式來提供一種對(duì) Java 集合運(yùn)算和表達(dá)的高階抽象。 注意這里的流操作可以看做是對(duì)集合數(shù)據(jù)的處理。
簡(jiǎn)單來說,流是一種數(shù)據(jù)渠道,用于操作數(shù)據(jù)源(集合、數(shù)組)所生產(chǎn)的元素序列。
- 元素序列 :就像集合一樣,流也提供了一個(gè)接口,可以訪問特定元素類型的一組有序值。
- 源:流會(huì)使用一個(gè)提供數(shù)據(jù)的源,如集合、數(shù)組或輸入/輸出資源。 請(qǐng)注意,從有序集 合生成流時(shí)會(huì)保留原有的順序。由列表生成的流,其元素順序與列表一致
- 數(shù)據(jù)處理操作:流的數(shù)據(jù)處理功能支持類似于數(shù)據(jù)庫的操作,以及函數(shù)式編程語言中 的常用操作,如filter、 map、 reduce、 find、 match、 sort等。流操作可以順序執(zhí) 行,也可并行執(zhí)行。
- 流水線:很多流操作本身會(huì)返回一個(gè)流,這樣多個(gè)操作就可以鏈接起來,形成一個(gè)大 的流水線。
- 內(nèi)部迭代:與使用迭代器顯式迭代的集合不同,流的迭代操作是在背后進(jìn)行的。
5.2、流操作
整個(gè)流操作就是一條流水線,將元素放在流水線上一個(gè)個(gè)地進(jìn)行處理。需要注意的是:很多流操作本身就會(huì)返回一個(gè)流,所以多個(gè)操作可以直接連接起來, 如下圖這樣,操作可以進(jìn)行鏈?zhǔn)秸{(diào)用,并且并行流還可以實(shí)現(xiàn)數(shù)據(jù)流并行處理操作。
5.3、流與集合
5.3.1、計(jì)算的時(shí)機(jī)
Stream 和集合的其中一個(gè)差異在于什么時(shí)候進(jìn)行計(jì)算,集合,它會(huì)包含當(dāng)前數(shù)據(jù)結(jié)構(gòu)中所有的值,你可以隨時(shí)增刪,但是集合里面的元素毫無疑問地都是已經(jīng)計(jì)算好了的。 流則是按需計(jì)算,按照使用者的需要計(jì)算數(shù)據(jù),你可以想象我們通過搜索引擎進(jìn)行搜索,搜索出來的條目并不是全部呈現(xiàn)出來的,而且先顯示最符合的前 10 條或者前 20 條,只有在點(diǎn)擊 “下一頁” 的時(shí)候,才會(huì)再輸出新的 10 條。
5.3.2、外部迭代與內(nèi)部迭代
把集合比作一個(gè)工廠的倉庫,一開始工廠比較落后,要對(duì)貨物作什么修改,只能工人親自走進(jìn)倉庫對(duì)貨物進(jìn)行處理,有時(shí)候還要將處理后的貨物放到一個(gè)新的倉庫里面。在這個(gè)時(shí)期,我們需要親自去做迭代,一個(gè)個(gè)地找到需要的貨物,并進(jìn)行處理,這叫做外部迭代。
后來工廠發(fā)展了起來,配備了流水線作業(yè),只要根據(jù)需求設(shè)計(jì)出相應(yīng)的流水線,然后工人只要把貨物放到流水線上,就可以等著接收成果了,而且流水線還可以根據(jù)要求直接把貨物輸送到相應(yīng)的倉庫。這就叫做內(nèi)部迭代,流水線已經(jīng)幫你把迭代給完成了,你只需要說要干什么就可以了(即設(shè)計(jì)出合理的流水線)。
Java 8 引入 Stream 很大程度是因?yàn)?#xff0c;流的內(nèi)部迭代可以自動(dòng)選擇一種合適你硬件的數(shù)據(jù)表示和并行實(shí)現(xiàn)。
5.4、創(chuàng)建流
在 Java 8 中, 集合接口有兩個(gè)方法來生成流:
- stream() ? 為集合創(chuàng)建串行流。
- parallelStream() ? 為集合創(chuàng)建并行流。
示例代碼如下:
public static void main(String[] args) { /** * 定義集合l1 并為集合創(chuàng)建串行流 */ List l1 = Arrays.asList("周星馳總結(jié)
以上是生活随笔為你收集整理的java8 stream 做累加_Java8新特性之Stream(上)|乐字节的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: s5720找mac 华为交换机_【基础】
- 下一篇: lisp 任意点 曲线距离_数学篇|看完