stream流【java8 二】
1.前言
Java 8的另一大亮點Stream,它與 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。
Java 8 中的 Stream 是對集合(Collection)對象功能的增強,它專注于對集合對象進行各種非常便利、高效的聚合操作(aggregate operation),或者大批量數據操作 (bulk data operation)。
Stream API 借助于同樣新出現的 Lambda 表達式,極大的提高編程效率和程序可讀性。同時它提供串行和并行兩種模式進行匯聚操作,并發模式能夠充分利用多核處理器的優勢,使用 fork/join 并行方式來拆分任務和加速處理過程。
1.1 為什么要用Stream
我個人總結有如下幾個特點:
- 有高效率的并行操作
- 有多中功能性的聚合操作
- 函數式編程,使代碼更加簡潔,提高編程效率
1.2 什么是聚合操作
舉個例子,例如我們現在有一個模塊的列表需要做如下處理:
客戶每月平均消費金額
最昂貴的在售商品
本周完成的有效訂單(排除了無效的)
取十個數據樣本作為首頁推薦
以上這些操作,你可以理解為就是對一個列表集合的聚合操作啦,類似于SQL里面的(count()、sum()、avg()....)!
有一些操作,有人可能會說,可以在SQL語句中完成過濾分類!首先不說SQL不能實現的功能,即使SQL能夠實現,但是數據庫畢竟是用來讀寫數據的,主要功能是用于數據落地存儲的。并不是用來做大量的邏輯處理的,所以不能為了圖方便,而忽略了性能方面的損耗!所以,相比之下,有一些列表操作我們必須在程序中做邏輯處理!那如果我們用之前的java處理方式,得像如下操作一樣:
for(int i=0;i<10;i++){if(....){//內部做一系列的邏輯判斷處理//也//許//有//這//么//多//行//還//不//止}else{//吧啦吧啦吧啦.......}}那如果用Stream來處理的話,可能就只有如下簡單幾行:
list.stream().filter().limit(10).foreach(); ?2.正文
2.1 Stream操作分類
Stream的操作可以分為兩大類:中間操作、終結操作
中間操作可分為:
無狀態(Stateless)操作:指元素的處理不受之前元素的影響
有狀態(Stateful)操作:指該操作只有拿到所有元素之后才能繼續下去
終結操作可分為:
短路(Short-circuiting)操作:指遇到某些符合條件的元素就可以得到最終結果
非短路(Unshort-circuiting)操作:指必須處理完所有元素才能得到最終結果
?
2.2 Stream API使用
接下來,我們將按各種類型的操作,對一些常用的功能API進行一一講解:
2.2.1 Stream 構成與創建
2.2.1.1 流的構成
當我們使用一個流的時候,通常包括三個基本步驟:
獲取一個數據源(source)→?數據轉換 → 執行操作獲取想要的結果,每次轉換原有 Stream 對象不改變,返回一個新的 Stream 對象(可以有多次轉換),這就允許對其操作可以像鏈條一樣排列,變成一個管道。
詳細看這個:https://blog.csdn.net/VABTC/article/details/113133323
?
?
總結
以上是生活随笔為你收集整理的stream流【java8 二】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 线程/协程/异步的编程模型(CPU利用率
- 下一篇: 计算机网络是如何通信的【一】