日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

stream流【java8 二】

發布時間:2024/10/5 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 二】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。