Java中Stream的flatMap與map使用場景及區(qū)別詳解
基本概念
Stream 流式操作,一般用于操作集合即 List 一類的數據結構,JDK 1.8 后的新特性
Stream 中的 map
一般用于對List 中的每一個元素執(zhí)行指定方法使得最終結果為最終的集合為每一個記錄的某一屬性的集合(get 方法)或者通過自定義的轉換方法等通過方法的加工將每一個元素處理為另一種元素最終返回成為一種全新元素的集合,即 簡單來說 Stream 的 map 使得其中的元素轉為另一種元素的映射(map)方法。
Stream 中的 flatMap
flat (扁平化) 當我們處理某一個集合時,這個集合中的某一個屬性依舊是一個集合即 類似于二維數組可以如下理解: 我們定義一個人的類,每個人又有很多衣服,衣服也定義一個類,所以可以如下定義:

如果我們處理一個人的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);結果如下:
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)]
可以看的出我們最終的結果中 flatMap 將每一個人的衣服集合合并到了一個集合中。而 普通的map 只是將多個List 加入到了一個 List 相當于一個二維數組。 flatMap 可以看做兩個流程,先執(zhí)行 普通的map,然后執(zhí)行 flat 扁平化過程,可以如圖理解如下:

到此這篇關于Java中Stream的flatMap與map使用場景及區(qū)別詳解的文章就介紹到這了,更多相關flatMap與map使用場景及區(qū)別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring使用Configuration注解管理bean的方式詳解
在Spring的世界里,Configuration注解就像是一位細心的園丁,它的主要職責是在這個繁花似錦的園子里,幫助我們聲明和管理各種各樣的bean,本文給大家介紹了在Spring中如何優(yōu)雅地管理你的bean,需要的朋友可以參考下2024-05-05
Spring MVC 4.1.3 + MyBatis零基礎搭建Web開發(fā)框架(注解模式)
本篇文章主要介紹了Spring MVC 4.1.3 + MyBatis零基礎搭建Web開發(fā)框架(注解模式),具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-03-03
詳解如何在Java項目中實現(xiàn)信號的連續(xù)接收
在Java項目中,信號的連續(xù)接收是一項重要的任務,特別是在處理異步事件或者需要對外部事件做出響應時,本篇博客將介紹如何在Java項目中實現(xiàn)信號的連續(xù)接收,包括信號的監(jiān)聽、處理和停止等步驟,需要的朋友可以參考下2023-11-11
Bean?Searcher配合SpringBoot的使用詳解
這篇文章主要介紹了Bean?Searcher配合SpringBoot的使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-06-06
關于spring項目中無法加載resources下文件問題及解決方法
在學習Spring過程中,TestContext框架試圖檢測一個默認的XML資源位置,再resources下創(chuàng)建了一個com.example的文件夾,執(zhí)行時,報錯,本文給大家介紹spring項目中無法加載resources下文件,感興趣的朋友跟隨小編一起看看吧2023-10-10

