Java中Stream的flatMap與map使用場(chǎng)景及區(qū)別詳解
基本概念
Stream 流式操作,一般用于操作集合即 List 一類的數(shù)據(jù)結(jié)構(gòu),JDK 1.8 后的新特性
Stream 中的 map
一般用于對(duì)List 中的每一個(gè)元素執(zhí)行指定方法使得最終結(jié)果為最終的集合為每一個(gè)記錄的某一屬性的集合(get 方法)或者通過自定義的轉(zhuǎn)換方法等通過方法的加工將每一個(gè)元素處理為另一種元素最終返回成為一種全新元素的集合,即 簡單來說 Stream 的 map 使得其中的元素轉(zhuǎn)為另一種元素的映射(map)方法。
Stream 中的 flatMap
flat (扁平化) 當(dāng)我們處理某一個(gè)集合時(shí),這個(gè)集合中的某一個(gè)屬性依舊是一個(gè)集合即 類似于二維數(shù)組可以如下理解: 我們定義一個(gè)人的類,每個(gè)人又有很多衣服,衣服也定義一個(gè)類,所以可以如下定義:
如果我們處理一個(gè)人的List 集合,并想把所有人的 服裝List 合并到一起時(shí)就可以使用 flatMap 案例如下:
List<Clothes> clothesList1 = new ArrayList<>(); clothesList1.add(new Clothes("大衣")); clothesList1.add(new Clothes("外套")); List<Clothes> clothesList2 = new ArrayList<>(); clothesList2.add(new Clothes("襯衣")); clothesList2.add(new Clothes("短袖")); // 第一個(gè)人 HumanBeing humanBeing = new HumanBeing(); humanBeing.setClothesList(clothesList1); // 第二個(gè)人 HumanBeing humanBeing2 = new HumanBeing(); humanBeing2.setClothesList(clothesList2); List<HumanBeing> humanBeingList = new ArrayList<>(); humanBeingList.add(humanBeing); humanBeingList.add(humanBeing2); // flatMap 執(zhí)行 List<Clothes> collect = humanBeingList.stream() .flatMap(aPerson -> aPerson.getClothesList().stream()) .collect(Collectors.toList()); // map 執(zhí)行 List<List<Clothes>> collect1 = humanBeingList.stream() .map(item -> item.getClothesList()) .collect(Collectors.toList()); System.out.println("collect = " + collect);
結(jié)果如下:
collect1 = [[Clothes(name=大衣, type=null, price=0.0, weight=0.0, size=null), Clothes(name=外套, type=null, price=0.0, weight=0.0, size=null)], [Clothes(name=襯衣, type=null, price=0.0, weight=0.0, size=null), Clothes(name=短袖, type=null, price=0.0, weight=0.0, size=null)]]collect = [Clothes(name=大衣, type=null, price=0.0, weight=0.0, size=null), Clothes(name=外套, type=null, price=0.0, weight=0.0, size=null), Clothes(name=襯衣, type=null, price=0.0, weight=0.0, size=null), Clothes(name=短袖, type=null, price=0.0, weight=0.0, size=null)]
可以看的出我們最終的結(jié)果中 flatMap 將每一個(gè)人的衣服集合合并到了一個(gè)集合中。而 普通的map 只是將多個(gè)List 加入到了一個(gè) List 相當(dāng)于一個(gè)二維數(shù)組。 flatMap 可以看做兩個(gè)流程,先執(zhí)行 普通的map,然后執(zhí)行 flat 扁平化過程,可以如圖理解如下:
到此這篇關(guān)于Java中Stream的flatMap與map使用場(chǎng)景及區(qū)別詳解的文章就介紹到這了,更多相關(guān)flatMap與map使用場(chǎng)景及區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java 根據(jù)url下載網(wǎng)絡(luò)資源
這篇文章主要介紹了Java 根據(jù)url下載網(wǎng)絡(luò)資源的示例代碼,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-11-11java中List去除重復(fù)數(shù)據(jù)的5種方式總結(jié)
這篇文章主要給大家總結(jié)介紹了關(guān)于java中List去除重復(fù)數(shù)據(jù)的5種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01springboot lua檢查redis庫存的實(shí)現(xiàn)示例
本文主要介紹了springboot lua檢查redis庫存的實(shí)現(xiàn)示例,為了優(yōu)化性能,通過Lua腳本實(shí)現(xiàn)對(duì)多個(gè)馬戲場(chǎng)次下的座位等席的庫存余量檢查,感興趣的可以了解一下2024-09-09用java實(shí)現(xiàn)的獲取優(yōu)酷等視頻縮略圖的實(shí)現(xiàn)代碼
想獲取優(yōu)酷等視頻縮略圖,在網(wǎng)上沒有找到滿意的資料,參考了huangdijia的PHP版工具一些思路,寫了下面的JAVA版代碼。。其實(shí)也可以做成JS版的2013-05-05如何使用Mockito調(diào)用靜態(tài)方法和void方法
這篇文章主要介紹了如何使用Mockito調(diào)用靜態(tài)方法和void方法的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07SpringBoot自定義注解及AOP的開發(fā)和使用詳解
在公司項(xiàng)目中,如果需要做一些公共的功能,如日志等,最好的方式是使用自定義注解,自定義注解可以實(shí)現(xiàn)我們對(duì)想要添加日志的方法上添加,這篇文章基于日志功能來講講自定義注解應(yīng)該如何開發(fā)和使用,需要的朋友可以參考下2023-08-08Java創(chuàng)建對(duì)象之顯示創(chuàng)建與隱式創(chuàng)建
在本篇文章中,小編會(huì)帶大家學(xué)習(xí)面向?qū)ο笾嘘P(guān)于對(duì)象的創(chuàng)建之顯示創(chuàng)建和隱式創(chuàng)建,其實(shí)類和對(duì)象作為面向?qū)ο笾凶罨镜模彩亲钪匾?需要的朋友可以參考下2023-05-05