JDK8之Stream

JDK9今年就要發佈了,而JDK8估計還有好多人沒用過,最近幾篇就簡單介紹下JDK8的一些比較有趣的用法。而本篇文章會初步介紹一下JDK8中的Stream也就是流的使用。java


爲何須要 Stream

Stream 做爲 Java 8 的一大亮點,它與 java.io 包裏的 InputStream 和 OutputStream 是徹底不一樣的概念。它也不一樣於 StAX 對 XML 解析的 Stream,也不是 Amazon Kinesis 對大數據實時處理的 Stream。Java 8 中的 Stream 是對集合(Collection)對象功能的加強,它專一於對集合對象進行各類很是便利、高效的聚合操做(aggregate operation),或者大批量數據操做 (bulk data operation)。Stream API 藉助於一樣新出現的 Lambda 表達式,極大的提升編程效率和程序可讀性。同時它提供串行和並行兩種模式進行匯聚操做,併發模式可以充分利用多核處理器的優點,使用 fork/join 並行方式來拆分任務和加速處理過程。一般編寫並行代碼很難並且容易出錯, 但使用 Stream API 無需編寫一行多線程的代碼,就能夠很方便地寫出高性能的併發程序。因此說,Java 8 中首次出現的 java.util.stream 是一個函數式語言+多核時代綜合影響的產物。同時,理論上流的數據源能夠是無限大的。數據庫

從以上介紹上(摘抄自網上= =||)能夠看出:編程

一、JDK8中的Stream的數據源來自集合,Stream是對集合進行操做的;微信

二、Stream無須顯示的編寫多線程代碼就可實現並行(利用fork/join框架)。多線程


下面就開始用代碼簡單展現下Stream的用法(主要與傳統寫法對比)。併發


遍歷集合
框架


遍歷集合是對集合最多見的操做了函數


首先是傳統寫法:性能


而後是Stream寫法:大數據


集合的遍歷看起來彷佛並無什麼太大區別,都是三行,下面換一個複雜的場景


求最大值(集合中都是int類型的值)


傳統寫法:

Stream寫法:

此時Stream的優點就顯而易見了,首先是代碼的縮減,最主要的是語義上比第一個要清晰多了(至少我這麼認爲O(∩_∩)O哈哈哈~)


數據過濾:


數據過濾也是經常使用的操做之一,下面經過過濾集合中大於10的數來比較一下傳統寫法和Stream寫法的差異。


傳統寫法:

Stream寫法:



數據轉換


數據的轉換也是很常見的對集合的操做,下面示範一下將集合中的字符串轉成數字的操做(集合中的字符串都是數字)。


首先是傳統操做:

Stream操做:


能夠看出這個操做也是很簡潔的。




除了以上幾種操做外流還能完成許多事情(許多數據庫的操做流也均可以完成),各位本身能夠嘗試一下。另外須要注意的是,默認流是串行操做的,除非本身指定須要並行操做。


獲取流的途徑:


Collection.stream()-->串行流

Collection.parallelStream()-->並行流

Arrays.stream(T array) or Stream.of()-->串行流

java.util.stream.IntStream.range()-->串行流

.......

除了以上列出的幾種外還有其餘的方式,不過經常使用的就這幾種了,能知足平常大部分需求了。



JDK8中Stream的使用就簡單介紹到此,各位下去能夠本身嘗試着使用一下,當你習慣後相信你會愛上這種寫法的,真心好使~~


若是對文章內容有任何疑問請加QQ1213812243。


本文分享自微信公衆號 - java初學者(JoeKerouac_public)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索