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