java8——引入流

Stream

Java8中的集合支持一個(gè)新的stream方法,它會(huì)返回一個(gè)流(接口定義在java.util.stream.Stream里)。你在后面會(huì)看到,還有很多其他的方式可以得到流,比如利用數(shù)值范圍或從I/O資源生成流元素。

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

流操作有兩個(gè)重要的特點(diǎn)。

  • 流水線——很多流操作本身會(huì)返回一個(gè)流,這樣多個(gè)操作就可以鏈接起來(lái),形成一個(gè)大的流水線。
  • 內(nèi)部迭代——與使用迭代器顯示迭代的集合不同,流的迭代操作是在背后進(jìn)行的。

流與集合

只能遍歷一遍

和迭代器類(lèi)似,流只能遍歷一次。遍歷完成之后,我們就說(shuō)這個(gè)流已經(jīng)被消費(fèi)掉了。你可以從原始數(shù)據(jù)源哪里再獲得一個(gè)新的流來(lái)重新遍歷一遍,就像迭代器一樣。例如,以下代碼會(huì)拋出一個(gè)異常,說(shuō)流已經(jīng)被消費(fèi)掉了:

List<String> title = Arrays.asList("java8","In","Action");
Stream<String> s = title.stream();
s.forEach(System.out::println);
s.forEach(System.out::println);//java.lang.IllegalStateException:流已經(jīng)被操作活關(guān)閉。

所以要記得,流只能消費(fèi)一次。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • Java8 in action 沒(méi)有共享的可變數(shù)據(jù),將方法和函數(shù)即代碼傳遞給其他方法的能力就是我們平常所說(shuō)的函數(shù)式...
    鐵牛很鐵閱讀 1,358評(píng)論 1 2
  • 第一章 為什么要關(guān)心Java 8 使用Stream庫(kù)來(lái)選擇最佳低級(jí)執(zhí)行機(jī)制可以避免使用Synchronized(同...
    謝隨安閱讀 1,560評(píng)論 0 4
  • 關(guān)于 本文是對(duì) Brian Goetz的State of the Lambda: Libraries Editio...
    aaron688閱讀 1,423評(píng)論 0 5
  • 從進(jìn)入“剽悍預(yù)備群”到正式入“二班交流群”也有一個(gè)星期了,每次看到晨讀、話題總想想好了,準(zhǔn)備完美了,再動(dòng)手寫(xiě)。對(duì)...
    02bfb4afb442閱讀 124評(píng)論 0 0

友情鏈接更多精彩內(nèi)容