欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Stream流中的Map與flatMap的區(qū)別及說明

 更新時(shí)間:2025年09月19日 15:23:48   作者:night_gu  
Map轉(zhuǎn)換單個(gè)元素為新值,保持流長(zhǎng)度;flatMap將元素轉(zhuǎn)換為流再合并,實(shí)現(xiàn)扁平化處理,兩者區(qū)別在于返回類型(對(duì)象vs流)及是否改變?cè)財(cái)?shù)量,適用于不同數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換場(chǎng)景

Map與flatMap的基本概念

Map用于將流中的每個(gè)元素通過指定函數(shù)轉(zhuǎn)換為另一個(gè)元素,生成一個(gè)一對(duì)一映射的新流。

例如將字符串流轉(zhuǎn)換為對(duì)應(yīng)長(zhǎng)度流:

List<String> words = Arrays.asList("a", "bb", "ccc");
List<Integer> lengths = words.stream()
                             .map(String::length)
                             .collect(Collectors.toList()); 
// 輸出: [1, 2, 3]

flatMap用于將每個(gè)元素轉(zhuǎn)換為流后合并所有流,形成一對(duì)多映射的扁平化結(jié)果。

例如拆分字符串中的單詞:

List<String> lines = Arrays.asList("hello world", "java stream");
List<String> words = lines.stream()
                          .flatMap(line -> Arrays.stream(line.split(" ")))
                          .collect(Collectors.toList());
// 輸出: ["hello", "world", "java", "stream"]

核心區(qū)別對(duì)比

  • 輸入輸出關(guān)系

Map保持原始流元素?cái)?shù)量不變,flatMap可能改變?cè)財(cái)?shù)量(如拆分為多個(gè)子流后合并)

  • 返回值要求

Map的Function返回普通對(duì)象,flatMap的Function必須返回Stream對(duì)象

  • 數(shù)據(jù)結(jié)構(gòu)處理

Map適合單一元素轉(zhuǎn)換,flatMap適合處理嵌套集合(如List<List>)

典型應(yīng)用場(chǎng)景

Map適用場(chǎng)景

數(shù)據(jù)類型轉(zhuǎn)換(String→Integer)、屬性提?。▽?duì)象→ID)、簡(jiǎn)單計(jì)算(數(shù)值→平方值)

flatMap適用場(chǎng)景

  • 合并多個(gè)集合:List<List<Integer>> → List<Integer>
  • 分解復(fù)合結(jié)構(gòu):字符串句子→單詞流、樹節(jié)點(diǎn)→子樹節(jié)點(diǎn)流
  • 過濾后展開操作:先filter再flatMap處理有效數(shù)據(jù)

性能注意事項(xiàng)

flatMap涉及流合并操作,可能產(chǎn)生更多臨時(shí)對(duì)象。

對(duì)于簡(jiǎn)單轉(zhuǎn)換優(yōu)先使用map,多層嵌套數(shù)據(jù)結(jié)構(gòu)才使用flatMap。

代碼示例對(duì)比

處理書籍作者場(chǎng)景:

// 使用map(保留嵌套結(jié)構(gòu))
List<Book> books = ...;
List<List<String>> authors = books.stream()
                                 .map(Book::getAuthors)
                                 .collect(Collectors.toList());

// 使用flatMap(扁平化結(jié)構(gòu))
List<String> allAuthors = books.stream()
                              .flatMap(book -> book.getAuthors().stream())
                              .collect(Collectors.toList());

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java和matlab畫多邊形閉合折線圖示例講解

    java和matlab畫多邊形閉合折線圖示例講解

    由于要將“哈密頓回路問題(TSP)”的求解中間結(jié)果表示出來,查了一下使用程序畫多邊形圖形?,F(xiàn)在在總結(jié)一下,這個(gè)圖是“由給定節(jié)點(diǎn)首尾相連的”閉合多邊形
    2014-02-02
  • 一些java二進(jìn)制的相關(guān)基礎(chǔ)知識(shí)

    一些java二進(jìn)制的相關(guān)基礎(chǔ)知識(shí)

    這篇文章主要介紹了一些java二進(jìn)制的相關(guān)基礎(chǔ)知識(shí),在Java語言中byte代表最小計(jì)量單位,byte由8位2進(jìn)制數(shù)組成。,需要的朋友可以參考下
    2019-06-06
  • Java反射入門、原理與使用方法詳解

    Java反射入門、原理與使用方法詳解

    這篇文章主要介紹了Java反射入門、原理與使用方法,結(jié)合實(shí)例形式詳細(xì)分析了java反射的概念、原理、使用方法與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2015-07-07
  • SpringBoot整合Redis的示例

    SpringBoot整合Redis的示例

    這篇文章主要介紹了SpringBoot整合Redis的示例,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-10-10
  • Java設(shè)計(jì)模式--代理模式

    Java設(shè)計(jì)模式--代理模式

    代理就是一個(gè)人或者一個(gè)機(jī)構(gòu)代表另一個(gè)人或者另一個(gè)機(jī)構(gòu)采取行動(dòng)。在一些情況下,一個(gè)客戶不想或者不能夠直接引用一個(gè)對(duì)象,而代理對(duì)象可以在客戶端和目標(biāo)對(duì)象之前起到中介的作用
    2021-07-07
  • 詳細(xì)學(xué)習(xí)Java Cookie技術(shù)(用戶登錄、瀏覽、訪問權(quán)限)

    詳細(xì)學(xué)習(xí)Java Cookie技術(shù)(用戶登錄、瀏覽、訪問權(quán)限)

    這篇文章主要為大家詳細(xì)介紹了Java Cookie技術(shù),顯示用戶上次登錄的時(shí)間、顯示用戶最近瀏覽的若干個(gè)圖片(按比例縮放)等,感興趣的小伙伴們可以參考一下
    2016-08-08
  • mybatis?plus常用注解的具體使用

    mybatis?plus常用注解的具體使用

    本文主要介紹了mybatis?plus常用注解的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Java中實(shí)現(xiàn)Comparator接口和用法實(shí)例(簡(jiǎn)明易懂)

    Java中實(shí)現(xiàn)Comparator接口和用法實(shí)例(簡(jiǎn)明易懂)

    這篇文章主要介紹了Java中實(shí)現(xiàn)Comparator接口和用法實(shí)例(簡(jiǎn)明易懂),本文給出實(shí)現(xiàn)Comparator接口的實(shí)例和使用這個(gè)接口的代碼實(shí)例,需要的朋友可以參考下
    2015-05-05
  • 在SpringBoot中整合數(shù)據(jù)源的示例詳解

    在SpringBoot中整合數(shù)據(jù)源的示例詳解

    這篇文章主要介紹了在SpringBoot中如何整合數(shù)據(jù)源,本文介紹了如何在SpringBoot項(xiàng)目中整合常見的數(shù)據(jù)源,包括JdbcTemplate、MyBatis和JPA,并探討了如何配置和使用多數(shù)據(jù)源,需要的朋友可以參考下
    2023-06-06
  • SWT(JFace) 打印功能

    SWT(JFace) 打印功能

    SWT(JFace)體驗(yàn)之打印功能
    2009-06-06

最新評(píng)論