搜尋
首頁JavaJava入門詳解Java8 Stream Api中map和flatMap操作

詳解Java8 Stream Api中map和flatMap操作

1.前言

#Java 8 提供了非常好用的 Stream API ,可以很方便的操作集合。今天我們來探討兩個Stream 中間操作map(Function super T, ? extends R> mapper)flatMap(Function super T, ? extends Stream&lt ;? extends R>> mapper)

【推薦學習:java影片教學

##2. map 運算

map 操作是將流中的元素進行再次加工形成一個新流。這在開發中很有用。例如我們有一個學生集合,我們需要從中提取學生的年齡以分析學生的年齡分佈曲線。 放在
Java 8 之前 我們要先透過新建一個集合然後透過遍歷學生集合來消費元素中的年齡屬性。現在我們透過很簡單的串流操作就完成了這個需求。

示意圖:

詳解Java8 Stream Api中map和flatMap操作

對應的偽代碼:

 // 伪代码
 List<integer> ages=studentList.stream().map(Student::getAge).collect(Collectors.toList());</integer>

3. flatMap 動作

#透過上面的例子,

map 操作應該要非常好理解。那麼 flatMap 是幹嘛的呢?這樣我們把上面的例子給改一下,如果是以班級為單位,提取所有班級下的所有學生的年齡以分析學生的年齡分佈曲線。這時我們使用上面的方法還行得通嗎?

 List<list>> studentGroup= gradeList.stream().map(Grade::getStudents).collect(Collectors.toList());</list>
透過上面的一頓操作,我們只能得到每個班級的學生集合的集合

List>。我們還需要嵌套循環才能取得學生的年齡數據,十分不便。如果我們能傳回全部學生的集合 List 就方便多了。沒錯! flatMap 可以搞定!

 // flatMap 提取 List<students>  map 提取年龄
 List<integer> ages = grades.stream().flatMap(grade -> grade.getStudents().stream()).map(Student::getAge).collect(Collectors.toList());</integer></students>

如同上面的偽代碼所示,我們使用

flatMap 將所有的學生匯聚在一起。然後再使用 map 操作來擷取年齡。 flatMap 不同於map 地方在於map 只是提取屬性放入流中,而flatMap 先提取屬性放入一個比較小的流,然後再將所有的流合併為一個流。有一種 “聚沙成塔” 的感覺。

再畫一張圖來加深理解:

詳解Java8 Stream Api中map和flatMap操作

#4. 總結

map 操作和flatMap 操作一旦你熟悉了,可以非常簡單地解決一些資料流的操作問題。擴充一下知識,其實Java 8 中 不光 Stream 中存在這兩種操作,其實 Optional 中也存在這兩種操作,作用都差不多。

本文來自 

java入門 欄目,歡迎學習!

以上是詳解Java8 Stream Api中map和flatMap操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:segmentfault。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具