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 方法)或者通過(guò)自定義的轉(zhuǎn)換方法等通過(guò)方法的加工將每一個(gè)元素處理為另一種元素最終返回成為一種全新元素的集合,即 簡(jiǎn)單來(lái)說(shuō) 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ò)程,可以如圖理解如下:

到此這篇關(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)文章
詳解如何通過(guò)Java實(shí)現(xiàn)類似Nginx代理
最近遇到一個(gè)問(wèn)題,在內(nèi)網(wǎng)環(huán)境中部署的項(xiàng)目需要調(diào)用外網(wǎng)完成一些應(yīng)用,一般情況我們可以通過(guò)增加一臺(tái)機(jī)器,部署到可以訪問(wèn)外網(wǎng)的服務(wù)器上,然后內(nèi)網(wǎng)直接連接該機(jī)器通過(guò)Nginx進(jìn)行代理即可,所以本文介紹了如何通過(guò)Java實(shí)現(xiàn)類似Nginx代理,需要的朋友可以參考下2024-08-08
Spring使用Configuration注解管理bean的方式詳解
在Spring的世界里,Configuration注解就像是一位細(xì)心的園丁,它的主要職責(zé)是在這個(gè)繁花似錦的園子里,幫助我們聲明和管理各種各樣的bean,本文給大家介紹了在Spring中如何優(yōu)雅地管理你的bean,需要的朋友可以參考下2024-05-05
Spring MVC 4.1.3 + MyBatis零基礎(chǔ)搭建Web開(kāi)發(fā)框架(注解模式)
本篇文章主要介紹了Spring MVC 4.1.3 + MyBatis零基礎(chǔ)搭建Web開(kāi)發(fā)框架(注解模式),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03
詳解如何在Java項(xiàng)目中實(shí)現(xiàn)信號(hào)的連續(xù)接收
在Java項(xiàng)目中,信號(hào)的連續(xù)接收是一項(xiàng)重要的任務(wù),特別是在處理異步事件或者需要對(duì)外部事件做出響應(yīng)時(shí),本篇博客將介紹如何在Java項(xiàng)目中實(shí)現(xiàn)信號(hào)的連續(xù)接收,包括信號(hào)的監(jiān)聽(tīng)、處理和停止等步驟,需要的朋友可以參考下2023-11-11
Java實(shí)現(xiàn)英文句子中的單詞順序逆序輸出的方法
這篇文章主要介紹了Java實(shí)現(xiàn)英文句子中的單詞順序逆序輸出的方法,涉及java字符串遍歷、判斷、截取、輸出等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
Java實(shí)現(xiàn)的校驗(yàn)銀行卡功能示例
這篇文章主要介紹了Java實(shí)現(xiàn)的校驗(yàn)銀行卡功能,結(jié)合完整實(shí)例形式分析了java針對(duì)銀行卡類型、歸屬地等信息的判斷、讀取相關(guān)操作技巧,需要的朋友可以參考下2018-06-06
Bean?Searcher配合SpringBoot的使用詳解
這篇文章主要介紹了Bean?Searcher配合SpringBoot的使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
關(guān)于spring項(xiàng)目中無(wú)法加載resources下文件問(wèn)題及解決方法
在學(xué)習(xí)Spring過(guò)程中,TestContext框架試圖檢測(cè)一個(gè)默認(rèn)的XML資源位置,再resources下創(chuàng)建了一個(gè)com.example的文件夾,執(zhí)行時(shí),報(bào)錯(cuò),本文給大家介紹spring項(xiàng)目中無(wú)法加載resources下文件,感興趣的朋友跟隨小編一起看看吧2023-10-10
MyBatis-Plus 默認(rèn)不更新null的4種方法
本文主要介紹了MyBatis-Plus 默認(rèn)不更新null的4種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2026-01-01

