JDK9今年就要發(fā)布了筑辨,而JDK8估計還有好多人沒用過,最近幾篇就簡單介紹下JDK8的一些比較有趣的用法棍辕。而本篇文章會初步介紹一下JDK8中的Stream也就是流的使用。
為什么需要 Stream
Stream 作為 Java 8 的一大亮點送矩,它與 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念哪替。它也不同于 StAX 對 XML 解析的 Stream,也不是 Amazon Kinesis 對大數(shù)據(jù)實時處理的 Stream晌块。Java 8 中的 Stream 是對集合(Collection)對象功能的增強帅霜,它專注于對集合對象進行各種非常便利、高效的聚合操作(aggregate operation)身冀,或者大批量數(shù)據(jù)操作 (bulk data operation)。Stream API 借助于同樣新出現(xiàn)的 Lambda 表達式珍促,極大的提高編程效率和程序可讀性。同時它提供串行和并行兩種模式進行匯聚操作娇斩,并發(fā)模式能夠充分利用多核處理器的優(yōu)勢穴翩,使用 fork/join 并行方式來拆分任務(wù)和加速處理過程。通常編寫并行代碼很難而且容易出錯, 但使用 Stream API 無需編寫一行多線程的代碼芒帕,就可以很方便地寫出高性能的并發(fā)程序。所以說副签,Java 8 中首次出現(xiàn)的 java.util.stream 是一個函數(shù)式語言+多核時代綜合影響的產(chǎn)物。同時,理論上流的數(shù)據(jù)源可以是無限大的本砰。
從以上介紹上(摘抄自網(wǎng)上= =||)可以看出:
1钢悲、JDK8中的Stream的數(shù)據(jù)源來自集合,Stream是對集合進行操作的莺琳;
2、Stream無須顯示的編寫多線程代碼就可實現(xiàn)并行(利用fork/join框架)珍手。
下面就開始用代碼簡單展示下Stream的用法(主要與傳統(tǒng)寫法對比)辞做。
遍歷集合
遍歷集合是對集合最常見的操作了
首先是傳統(tǒng)寫法:
然后是Stream寫法:
集合的遍歷看起來似乎并沒有什么太大區(qū)別秤茅,都是三行,下面換一個復(fù)雜的場景
求最大值(集合中都是int類型的值)
傳統(tǒng)寫法:
Stream寫法:
此時Stream的優(yōu)勢就顯而易見了课幕,首先是代碼的縮減,最主要的是語義上比第一個要清晰多了(至少我這么認為O(∩_∩)O哈哈哈~)
數(shù)據(jù)過濾:
數(shù)據(jù)過濾也是常用的操作之一粪般,下面通過過濾集合中大于10的數(shù)來比較一下傳統(tǒng)寫法和Stream寫法的差別污桦。
傳統(tǒng)寫法:
Stream寫法:
數(shù)據(jù)轉(zhuǎn)換
數(shù)據(jù)的轉(zhuǎn)換也是很常見的對集合的操作凡橱,下面示范一下將集合中的字符串轉(zhuǎn)成數(shù)字的操作(集合中的字符串都是數(shù)字)。
首先是傳統(tǒng)操作:
Stream操作:
可以看出這個操作也是很簡潔的顾稀。
除了以上幾種操作外流還能完成許多事情(許多數(shù)據(jù)庫的操作流也都可以完成)静秆,各位自己可以嘗試一下。另外需要注意的是抚笔,默認流是串行操作的侨拦,除非自己指定需要并行操作。
獲取流的途徑:
Collection.stream()-->串行流
Collection.parallelStream()-->并行流
Arrays.stream(T array) or Stream.of()-->串行流
java.util.stream.IntStream.range()-->串行流
.......
除了以上列出的幾種外還有其他的方式膨蛮,不過常用的就這幾種了季研,能滿足日常大部分需求了。
JDK8中Stream的使用就簡單介紹到此与涡,各位下去可以自己嘗試著使用一下,當(dāng)你習(xí)慣后相信你會愛上這種寫法的豺鼻,真心好使~~
如果對文章內(nèi)容有任何疑問請加QQ1213812243细睡。