Java 8 Stream 學(xué)習(xí)筆記

Stream

  • 是一系列的計算操作的合集,不是用于儲存數(shù)據(jù)的數(shù)據(jù)結(jié)果,使用目的在于將一系列數(shù)據(jù)轉(zhuǎn)化成目標(biāo)結(jié)果轧叽。

  • 產(chǎn)生結(jié)果,并且不修改源數(shù)據(jù)對象刊棕。

  • 對于Intermediate操作(各類型的計算操作)炭晒,只要不調(diào)用Terminal操作,流不會開始遍歷甥角。當(dāng)定義了多個Intermediate操作時网严,真正執(zhí)行時會有一個內(nèi)部轉(zhuǎn)換,僅遍歷一次完成所有的計算操作嗤无。

  • 數(shù)據(jù)源可以是無限的震束,可通過操作將其轉(zhuǎn)化為有限的結(jié)果怜庸,比如limit(10)。

  • 在一個流的生命周期內(nèi)垢村,源數(shù)據(jù)中的每個元素僅會被訪問一次割疾。

需要研究JDK代碼。

構(gòu)造流的方法

  • Collection的 stream() 和 parallelStream() 方法嘉栓。

  • Arrays.stream(Object[])

  • 靜態(tài)工廠方法宏榕,比如 Stream.of(Object[]), IntStream.range(int, int), Stream.iterate(Object, UnaryOperator)

  • BufferedReader.lines()

  • Files

  • Random.ints()

  • 其他(待研究)

操作類型

Intermediate

Intermediate操作總是返回一個新的流,并且不涉及任何實際操作侵佃。

分為有狀態(tài)無狀態(tài)兩種麻昼。
無狀態(tài):例如 filter() 和 map(),不對任何后續(xù)元素產(chǎn)生影響馋辈,每個元素可獨立操作涌献。
有狀態(tài):例如 distinct() 和 sort(),處理元素時首有,需要參考已處理元素的狀態(tài)燕垃。有狀態(tài)的操作會需要遍歷所有元素才可得出結(jié)果(例如排序),也就是說井联,在并行處理模式下卜壕,部分元素會需要重復(fù)計算 或 需要一個緩存。

Terminal

遍歷元素并輸出一個結(jié)果烙常。一個流只能有一個Terminal操作轴捎,遍歷完成后,流被消耗完畢蚕脏,無法再次遍歷侦副。

特例:iterator() 和 spliterator() (待研究)

Short-Circuiting

  • Intermidiate:當(dāng)這個操作的對象是一個無限大的數(shù)據(jù)源時,這個操作會產(chǎn)生有限的結(jié)果驼鞭。

  • Terminal:當(dāng)這個操作的對象是一個無限大的數(shù)據(jù)源時秦驯,這個操作會在有限的時間內(nèi)完成。

并行

任何流都可以應(yīng)用并行操作挣棕。與單線程序列化操作不同的僅僅在于生成流的方法译隘。

不干涉(non-interference)

遍歷過程中,絕對不會修改原數(shù)據(jù)洛心。

Reduction Operation (fold)

輸入是一系列元素固耘,輸出是一個匯總的結(jié)果,例如 求和 或者 求最大值词身。

在parallelStream的模式下厅目,Reduction Operation也能正確執(zhí)行。它會在各子集中求出一個結(jié)果,然后匯總所有的子結(jié)果损敷,得出最終的值户辫。

<U> U reduce(U identity,  // initial seed value for the reduction and a default result
              BiFunction<U, ? super T, U> accumulator,  // take partial result and the next element to produce a new partial result
              BinaryOperator<U> combiner);  // combine partial results to a final result

Mutable reduction

將一個集合整合為目標(biāo)集合。

 <R> R collect(Supplier<R> supplier,  // a function to construct new instances of the result container
               BiConsumer<R, ? super T> accumulator,  // incorporate an input element into a result container
               BiConsumer<R, R> combiner);  // a combining function to merge contents

參考

JDK1.8 Package java.util.stream

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嗤锉,一起剝皮案震驚了整個濱河市渔欢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瘟忱,老刑警劉巖奥额,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異访诱,居然都是意外死亡垫挨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門触菜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來九榔,“玉大人,你說我怎么就攤上這事涡相≌懿矗” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵催蝗,是天一觀的道長切威。 經(jīng)常有香客問我,道長丙号,這世上最難降的妖魔是什么先朦? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮犬缨,結(jié)果婚禮上喳魏,老公的妹妹穿的比我還像新娘。我一直安慰自己怀薛,他們只是感情好刺彩,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乾戏,像睡著了一般迂苛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鼓择,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音就漾,去河邊找鬼呐能。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的摆出。 我是一名探鬼主播朗徊,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼偎漫!你這毒婦竟也來了爷恳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤象踊,失蹤者是張志新(化名)和其女友劉穎温亲,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體杯矩,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡栈虚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了史隆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片魂务。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖泌射,靈堂內(nèi)的尸體忽然破棺而出粘姜,到底是詐尸還是另有隱情,我是刑警寧澤熔酷,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布相艇,位于F島的核電站,受9級特大地震影響纯陨,放射性物質(zhì)發(fā)生泄漏坛芽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一翼抠、第九天 我趴在偏房一處隱蔽的房頂上張望咙轩。 院中可真熱鬧,春花似錦阴颖、人聲如沸活喊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钾菊。三九已至,卻和暖如春偎肃,著一層夾襖步出監(jiān)牢的瞬間煞烫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工累颂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留滞详,地道東北人凛俱。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像料饥,于是被迫代替她去往敵國和親蒲犬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355