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源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。