摘要:中提出一個集合流的抽象工具,簡稱,用于集合內(nèi)元素的計算,更確切的說是過濾和統(tǒng)計操作。返回由新元素組成的。返回基本類型對應(yīng)的。主要用來查看流中元素的數(shù)據(jù)狀態(tài)。聚合操作,最小值,最大值,總數(shù)量。短路操作,有一個符合條件返回。
Stream(流)在JAVA已經(jīng)不是一個新詞了。很早之前我們就接觸過JAVA中的輸入輸出流(IO Stream),它是對數(shù)據(jù)輸入輸出操作的抽象封裝。JAVA8中提出一個集合流的抽象工具(java.util.stream,簡稱Stream),用于集合內(nèi)元素的計算,更確切的說是過濾和統(tǒng)計操作。
Stream創(chuàng)建Stream不是一種真實(shí)的數(shù)據(jù)源(不存在數(shù)據(jù)結(jié)構(gòu)),所以我們沒有辦法直接來創(chuàng)建它,Stream只能依賴其他數(shù)據(jù)源來轉(zhuǎn)換成我們的抽象操作。Stream本身是不存在,只是我們抽象出來的一個抽象操作,經(jīng)過各種操作之后,Stream還需要轉(zhuǎn)換成真實(shí)的數(shù)據(jù)源。
常見創(chuàng)建方式如下:
Collection
parallelStream()
stream()
Stream.of(...)
Arrays.stream(...)
Stream.generate(...)
Stream.iterate(seek, unaryOperator)
BufferedReader
lines()
其實(shí)最終都是依賴StreamSupport類來完成Stream創(chuàng)建的。
Stream操作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操作由零個或多個中間操作(intermediate operation)和一個結(jié)束操作(terminal operation)兩部分組成。只有執(zhí)行結(jié)束操作時,Stream定義的中間操作才會依次執(zhí)行,這就是Stream的延遲特性。
中間操作filter
Returns a stream consisting of the elements of this stream that match the given predicate.
返回一個符合條件的Stream。
map
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基本類型對應(yīng)的Stream。
flatMap
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.)
簡單的說,就是一個或多個流合并成一個新流。
flatMapToInt、flatMapToLong、flatMapToDouble
返回對應(yīng)的IntStream、LongStream、DoubleStream流。
distinct
返回去重的Stream。
sorted
返回一個排序的Stream。
peek
主要用來查看流中元素的數(shù)據(jù)狀態(tài)。
limit
返回前n個元素數(shù)據(jù)組成的Stream。屬于短路操作
skip
返回第n個元素后面數(shù)據(jù)組成的Stream。
結(jié)束操作forEach
循環(huán)操作Stream中數(shù)據(jù)。
forEachOrdered
暗元素順序執(zhí)行循環(huán)操作。
toArray
返回流中元素對應(yīng)的數(shù)組對象。
reduce
聚合操作,用來做統(tǒng)計。
collect
聚合操作,封裝目標(biāo)數(shù)據(jù)。
min、max、count
聚合操作,最小值,最大值,總數(shù)量。
anyMatch
短路操作,有一個符合條件返回true。
allMatch
所有數(shù)據(jù)都符合條件返回true。
noneMatch
所有數(shù)據(jù)都不符合條件返回true。
findFirst
短路操作,獲取第一個元素。
findAny
短路操作,獲取任一元素。
總結(jié)Stream每個操作都是依賴Lambda表達(dá)式或方法引用。
Stream操作是一種聲明式的數(shù)據(jù)處理方式。
Stream操作提高了數(shù)據(jù)處理效率、開發(fā)效率。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/70791.html
摘要:用于對流進(jìn)行排序。三最終操作用于迭代流中的每個元素,并執(zhí)行相應(yīng)的操作。類類也是的新特性,用于有效解決問題。與的功能一樣,不過接受一個函數(shù)式接口來生成對象為空則拋出異常與使用類似與使用類似這是一種級聯(lián)的方式,能夠解決方式的嵌套問題。 Stream API Stream API是Java8的新特性,通常用于對集合進(jìn)行一些操作,可以幫助開發(fā)者寫出更高效、整潔的代碼。 一、Stream流的創(chuàng)建...
摘要:使用我們來看下面這段代碼,里面有一個屬性代表菜品的卡路里值,現(xiàn)在的需求是按卡路里對菜品進(jìn)行排序再返回菜名,并且要求卡路里的值大于。 前言: 在實(shí)際開發(fā)中經(jīng)常需要獲取各種各樣不同格式的數(shù)據(jù),因?yàn)閿?shù)據(jù)庫的表結(jié)構(gòu)是一開始就設(shè)計好的所以很多時候我們不得不先從數(shù)據(jù)庫里或其他地方獲得數(shù)據(jù)后再根據(jù)需求去一層一層的篩選數(shù)據(jù),在Java 8之前的做法不外乎就是各種List、Set一起上,各種循環(huán)判斷。如...
摘要:獲取每個元素的字符串長度放入新流中,然后轉(zhuǎn)為類型。歸約歸約就是把整個流歸約成一個值的操作,比如求集合中最大的元素所有元素值的和之類的操作。 前言: 上一篇文章 Java 8之stream介紹和使用 中講解了stream的定義和用法,簡單介紹幾個最基本最常用的方法,其實(shí)stream還有更強(qiáng)大的功能,這篇文章就會給大家介紹stream的進(jìn)階用法。 篩選: 在上一篇文章中我們介紹了使用fi...
摘要:接口有一個方法,可以返回值。在上面的代碼中,就是獲取字符串的長度,然后將每個字符串的長度作為返回值返回。 今天我們還講講Consumer、Supplier、Predicate、Function這幾個接口的用法,在 Java8 的用法當(dāng)中,這幾個接口雖然沒有明目張膽的使用,但是,卻是潤物細(xì)無聲的。為什么這么說呢? 這幾個接口都在 java.util.function 包下的,分別是Con...
閱讀 1002·2021-11-17 09:33
閱讀 471·2019-08-30 11:16
閱讀 2526·2019-08-29 16:05
閱讀 3406·2019-08-29 15:28
閱讀 1455·2019-08-29 11:29
閱讀 2003·2019-08-26 13:51
閱讀 3440·2019-08-26 11:55
閱讀 1271·2019-08-26 11:31