本篇內(nèi)容主要講解“Java8 StreamApi中的map和flatMap操作方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Java8 StreamApi中的map和flatMap操作方法是什么”吧!
1.前言
Java 8提供了非常好用的 Stream API ,可以很方便的操作集合。今天我們來探討兩個Stream 中間操作map(Function super T, ? extends R> mapper)
和flatMap(Function super T, ? extends Stream extends R>> mapper)
2. map 操作
map
操作是將流中的元素進行再次加工形成一個新流。這在開發(fā)中很有用。比如我們有一個學(xué)生集合,我們需要從中提取學(xué)生的年齡以分析學(xué)生的年齡分布曲線。
放在Java 8 之前 我們要通過新建一個集合然后通過遍歷學(xué)生集合來消費元素中的年齡屬性?,F(xiàn)在我們通過很簡單的流式操作就完成了這個需求。
對應(yīng)的偽代碼:
// 偽代碼 List
3. flatMap 操作
通過上面的例子,map
操作應(yīng)該非常好理解。那么flatMap
是干嘛的呢? 這樣我們把上面的例子給改一下,如果是以班級為單位,提取所有班級下的所有學(xué)生的年齡以分析學(xué)生的年齡分布曲線。這時我們使用上面的方法還行得通嗎?
List> studentGroup= gradeList.stream().map(Grade::getStudents).collect(Collectors.toList());
通過上面的一頓操作,我們只能得到每個班的學(xué)生集合的集合List
。 我們還需要嵌套循環(huán)才能獲取學(xué)生的年齡數(shù)據(jù),十分不便。如果我們能返回全部學(xué)生的集合>
List
就方便多了。 沒錯!flatMap
可以搞定!
// flatMap 提取 List
正如上面的偽代碼所示,我們使用flatMap
將所有的學(xué)生匯聚到一起。然后再使用map
操作提取年齡。flatMap
不同于map
地方在于map
只是提取屬性放入流中,而 flatMap 先提取屬性放入一個比較小的流,然后再將所有的流合并為一個流。有一種 “聚沙成塔” 的感覺。
到此,相信大家對“Java8 StreamApi中的map和flatMap操作方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)建站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!