摘要:中提出一個(gè)集合流的抽象工具,簡(jiǎn)稱(chēng),用于集合內(nèi)元素的計(jì)算,更確切的說(shuō)是過(guò)濾和統(tǒng)計(jì)操作。返回由新元素組成的。返回基本類(lèi)型對(duì)應(yīng)的。主要用來(lái)查看流中元素的數(shù)據(jù)狀態(tài)。聚合操作,最小值,最大值,總數(shù)量。短路操作,有一個(gè)符合條件返回。
Stream(流)在JAVA已經(jīng)不是一個(gè)新詞了。很早之前我們就接觸過(guò)JAVA中的輸入輸出流(IO Stream),它是對(duì)數(shù)據(jù)輸入輸出操作的抽象封裝。JAVA8中提出一個(gè)集合流的抽象工具(java.util.stream,簡(jiǎn)稱(chēng)Stream),用于集合內(nèi)元素的計(jì)算,更確切的說(shuō)是過(guò)濾和統(tǒng)計(jì)操作。
Stream創(chuàng)建Stream不是一種真實(shí)的數(shù)據(jù)源(不存在數(shù)據(jù)結(jié)構(gòu)),所以我們沒(méi)有辦法直接來(lái)創(chuàng)建它,Stream只能依賴(lài)其他數(shù)據(jù)源來(lái)轉(zhuǎn)換成我們的抽象操作。Stream本身是不存在,只是我們抽象出來(lái)的一個(gè)抽象操作,經(jīng)過(guò)各種操作之后,Stream還需要轉(zhuǎn)換成真實(shí)的數(shù)據(jù)源。
常見(jiàn)創(chuàng)建方式如下:
Collection
</>復(fù)制代碼
parallelStream()
stream()
Stream.of(...)
Arrays.stream(...)
Stream.generate(...)
Stream.iterate(seek, unaryOperator)
BufferedReader
</>復(fù)制代碼
lines()
其實(shí)最終都是依賴(lài)StreamSupport類(lèi)來(lái)完成Stream創(chuàng)建的。
Stream操作</>復(fù)制代碼
To perform a computation, stream operations are composed into a stream pipeline. A stream pipeline consists of a source (which might be an array, a collection, a generator function, an I/O channel, etc), zero or more intermediate operations (which transform a stream into another stream, such as filter(Predicate)), and a terminal operation (which produces a result or side-effect, such as count() or forEach(Consumer)). Streams are lazy; computation on the source data is only performed when the terminal operation is initiated, and source elements are consumed only as needed.
Stream操作由零個(gè)或多個(gè)中間操作(intermediate operation)和一個(gè)結(jié)束操作(terminal operation)兩部分組成。只有執(zhí)行結(jié)束操作時(shí),Stream定義的中間操作才會(huì)依次執(zhí)行,這就是Stream的延遲特性。
中間操作filter
</>復(fù)制代碼
Returns a stream consisting of the elements of this stream that match the given predicate.
返回一個(gè)符合條件的Stream。
map
</>復(fù)制代碼
Returns a stream consisting of the results of applying the given function to the elements of this stream.
返回由新元素組成的Stream。
mapToInt、mapToLong、mapToDouble
返回int、long、double基本類(lèi)型對(duì)應(yīng)的Stream。
flatMap
</>復(fù)制代碼
Returns a stream consisting of the results of replacing each element of this stream with the contents of a mapped stream produced by applying the provided mapping function to each element. Each mapped stream is closed after its contents have been placed into this stream. (If a mapped stream is null an empty stream is used, instead.)
簡(jiǎn)單的說(shuō),就是一個(gè)或多個(gè)流合并成一個(gè)新流。
flatMapToInt、flatMapToLong、flatMapToDouble
返回對(duì)應(yīng)的IntStream、LongStream、DoubleStream流。
distinct
返回去重的Stream。
sorted
返回一個(gè)排序的Stream。
peek
主要用來(lái)查看流中元素的數(shù)據(jù)狀態(tài)。
limit
返回前n個(gè)元素?cái)?shù)據(jù)組成的Stream。屬于短路操作
skip
返回第n個(gè)元素后面數(shù)據(jù)組成的Stream。
結(jié)束操作forEach
循環(huán)操作Stream中數(shù)據(jù)。
forEachOrdered
暗元素順序執(zhí)行循環(huán)操作。
toArray
返回流中元素對(duì)應(yīng)的數(shù)組對(duì)象。
reduce
聚合操作,用來(lái)做統(tǒng)計(jì)。
collect
聚合操作,封裝目標(biāo)數(shù)據(jù)。
min、max、count
聚合操作,最小值,最大值,總數(shù)量。
anyMatch
短路操作,有一個(gè)符合條件返回true。
allMatch
所有數(shù)據(jù)都符合條件返回true。
noneMatch
所有數(shù)據(jù)都不符合條件返回true。
findFirst
短路操作,獲取第一個(gè)元素。
findAny
短路操作,獲取任一元素。
總結(jié)Stream每個(gè)操作都是依賴(lài)Lambda表達(dá)式或方法引用。
Stream操作是一種聲明式的數(shù)據(jù)處理方式。
Stream操作提高了數(shù)據(jù)處理效率、開(kāi)發(fā)效率。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/70791.html
摘要:用于對(duì)流進(jìn)行排序。三最終操作用于迭代流中的每個(gè)元素,并執(zhí)行相應(yīng)的操作。類(lèi)類(lèi)也是的新特性,用于有效解決問(wèn)題。與的功能一樣,不過(guò)接受一個(gè)函數(shù)式接口來(lái)生成對(duì)象為空則拋出異常與使用類(lèi)似與使用類(lèi)似這是一種級(jí)聯(lián)的方式,能夠解決方式的嵌套問(wèn)題。 Stream API Stream API是Java8的新特性,通常用于對(duì)集合進(jìn)行一些操作,可以幫助開(kāi)發(fā)者寫(xiě)出更高效、整潔的代碼。 一、Stream流的創(chuàng)建...
摘要:因此,使用并行流需要考慮以下幾點(diǎn)數(shù)據(jù)量將問(wèn)題分解之后并行化處理,再將結(jié)果合并會(huì)帶來(lái)額外的開(kāi)銷(xiāo)。 目錄 簡(jiǎn)介 用法 例子 注意點(diǎn) 一. 簡(jiǎn)介 流是Java8引入的一個(gè)新特性,提供了對(duì)集合元素一系列便捷的操作,可以用很少的代碼實(shí)現(xiàn)復(fù)雜的功能。流有兩大類(lèi),分別是對(duì)象流(Stream),基本數(shù)據(jù)流(IntStream、LongStream、DoubleStream)。 二.用法 流的使用通...
摘要:使用我們來(lái)看下面這段代碼,里面有一個(gè)屬性代表菜品的卡路里值,現(xiàn)在的需求是按卡路里對(duì)菜品進(jìn)行排序再返回菜名,并且要求卡路里的值大于。 前言: 在實(shí)際開(kāi)發(fā)中經(jīng)常需要獲取各種各樣不同格式的數(shù)據(jù),因?yàn)閿?shù)據(jù)庫(kù)的表結(jié)構(gòu)是一開(kāi)始就設(shè)計(jì)好的所以很多時(shí)候我們不得不先從數(shù)據(jù)庫(kù)里或其他地方獲得數(shù)據(jù)后再根據(jù)需求去一層一層的篩選數(shù)據(jù),在Java 8之前的做法不外乎就是各種List、Set一起上,各種循環(huán)判斷。如...
摘要:獲取每個(gè)元素的字符串長(zhǎng)度放入新流中,然后轉(zhuǎn)為類(lèi)型。歸約歸約就是把整個(gè)流歸約成一個(gè)值的操作,比如求集合中最大的元素所有元素值的和之類(lèi)的操作。 前言: 上一篇文章 Java 8之stream介紹和使用 中講解了stream的定義和用法,簡(jiǎn)單介紹幾個(gè)最基本最常用的方法,其實(shí)stream還有更強(qiáng)大的功能,這篇文章就會(huì)給大家介紹stream的進(jìn)階用法。 篩選: 在上一篇文章中我們介紹了使用fi...
摘要:接口有一個(gè)方法,可以返回值。在上面的代碼中,就是獲取字符串的長(zhǎng)度,然后將每個(gè)字符串的長(zhǎng)度作為返回值返回。 今天我們還講講Consumer、Supplier、Predicate、Function這幾個(gè)接口的用法,在 Java8 的用法當(dāng)中,這幾個(gè)接口雖然沒(méi)有明目張膽的使用,但是,卻是潤(rùn)物細(xì)無(wú)聲的。為什么這么說(shuō)呢? 這幾個(gè)接口都在 java.util.function 包下的,分別是Con...
閱讀 961·2021-11-17 09:33
閱讀 422·2019-08-30 11:16
閱讀 2474·2019-08-29 16:05
閱讀 3355·2019-08-29 15:28
閱讀 1400·2019-08-29 11:29
閱讀 1956·2019-08-26 13:51
閱讀 3392·2019-08-26 11:55
閱讀 1212·2019-08-26 11:31