最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

Map與flatMap的基本概念

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

例如將字符串流轉換為對應長度流:

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

flatMap用于將每個元素轉換為流后合并所有流,形成一對多映射的扁平化結果。

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

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ū)別對比

  • 輸入輸出關系

Map保持原始流元素數(shù)量不變,flatMap可能改變元素數(shù)量(如拆分為多個子流后合并)

  • 返回值要求

Map的Function返回普通對象,flatMap的Function必須返回Stream對象

  • 數(shù)據(jù)結構處理

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

典型應用場景

Map適用場景

數(shù)據(jù)類型轉換(String→Integer)、屬性提取(對象→ID)、簡單計算(數(shù)值→平方值)

flatMap適用場景

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

性能注意事項

flatMap涉及流合并操作,可能產生更多臨時對象。

對于簡單轉換優(yōu)先使用map,多層嵌套數(shù)據(jù)結構才使用flatMap。

代碼示例對比

處理書籍作者場景:

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

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

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java同步關鍵字synchronize底層實現(xiàn)原理解析

    Java同步關鍵字synchronize底層實現(xiàn)原理解析

    synchronized關鍵字對大家來說并不陌生,當我們遇到并發(fā)情況時,優(yōu)先會想到用synchronized關鍵字去解決,synchronized確實能夠幫助我們去解決并發(fā)的問題,接下來通過本文給大家分享java synchronize底層實現(xiàn)原理,感興趣的朋友一起看看吧
    2021-08-08
  • Java中創(chuàng)建ZIP文件的方法

    Java中創(chuàng)建ZIP文件的方法

    本文通過一段簡單代碼給大家介紹了java中創(chuàng)建zip文件的方法,代碼超簡單,感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-06-06
  • SpringBoot如何使用validator框架優(yōu)雅地校驗參數(shù)

    SpringBoot如何使用validator框架優(yōu)雅地校驗參數(shù)

    文章介紹了如何使用SpringValidation進行參數(shù)校驗,包括引入依賴、@requestBody和@requestParam參數(shù)校驗、統(tǒng)一異常處理、分組校驗、嵌套校驗、自定義校驗、業(yè)務規(guī)則校驗以及@Valid和@Validated的區(qū)別,同時,列舉了常用的BeanValidation和HibernateValidator注解
    2025-02-02
  • JDK版本修改不生效的解決方法

    JDK版本修改不生效的解決方法

    本文主要介紹了在配置新電腦環(huán)境時遇到JDK版本切換失敗的問題,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-03-03
  • Java 17 更新后的 strictfp 關鍵字

    Java 17 更新后的 strictfp 關鍵字

    strictfp 可能是最沒有存在感的關鍵字了,很多人寫了多年 Java 甚至都不知道它的存在,strictfp,字面意思就是嚴格的浮點型。這玩意兒居然還有個關鍵字,可見其地位還是很高的。下面文章小編就帶大家詳細介紹其關鍵字,需要的朋友可以參考一下
    2021-09-09
  • 詳解log4j-over-slf4j與slf4j-log4j12共存stack overflow異常分析

    詳解log4j-over-slf4j與slf4j-log4j12共存stack overflow異常分析

    這篇文章主要介紹了詳解log4j-over-slf4j與slf4j-log4j12共存stack overflow異常分析,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • 基于HTTP協(xié)議實現(xiàn)簡單RPC框架的方法詳解

    基于HTTP協(xié)議實現(xiàn)簡單RPC框架的方法詳解

    RPC全名(Remote?Procedure?Call),翻譯過來就是遠程過程調用,本文將為大家介紹如何基于HTTP協(xié)議實現(xiàn)簡單RPC框架,感興趣的小伙伴可以了解一下
    2023-06-06
  • 長度最小的子數(shù)組題目詳解(Java版)

    長度最小的子數(shù)組題目詳解(Java版)

    這篇文章主要給大家介紹了關于長度最小的子數(shù)組(Java版)的相關資料,這到題來自力扣,通過學習本文對大家理解這道題目有很大的幫助,需要的朋友可以參考下
    2023-12-12
  • Java ArrayList擴容機制原理深入分析

    Java ArrayList擴容機制原理深入分析

    在Java中,ArrayList是最常用的集合之一。它是一種容器,它的內部定義了一個Object類型的數(shù)組elementData,因此可用于存儲任意類型的數(shù)據(jù)。我們知道,數(shù)組是長度恒定的。而ArrayList相當于是一個長度可變的動態(tài)數(shù)組,一起來看看的它的擴容機制
    2023-02-02
  • java實現(xiàn)文件歸檔和還原

    java實現(xiàn)文件歸檔和還原

    這篇文章主要為大家詳細介紹了java實現(xiàn)文件歸檔和還原,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09

最新評論

包头市| 大安市| 金溪县| 泾源县| 乳山市| 台湾省| 景泰县| 龙游县| 上蔡县| 昭平县| 大同市| 怀来县| 锡林郭勒盟| 怀仁县| 古丈县| 寿宁县| 朝阳市| 江口县| 锦屏县| 麻栗坡县| 杂多县| 瓮安县| 陆丰市| 琼海市| 鹰潭市| 锦屏县| 阿拉善盟| 临沂市| 新竹市| 阿城市| 万年县| 许昌市| 天峻县| 读书| 沽源县| 高青县| 南江县| 扎鲁特旗| 麻阳| 北流市| 禄劝|