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

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

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

Map與flatMap的基本概念

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

例如將字符串流轉(zhuǎn)換為對應長度流:

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

flatMap用于將每個元素轉(zhuǎn)換為流后合并所有流,形成一對多映射的扁平化結(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ū)別對比

  • 輸入輸出關系

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

  • 返回值要求

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

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

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

典型應用場景

Map適用場景

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

flatMap適用場景

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

性能注意事項

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

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

代碼示例對比

處理書籍作者場景:

// 使用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é)

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

相關文章

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

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

    synchronized關鍵字對大家來說并不陌生,當我們遇到并發(fā)情況時,優(yōu)先會想到用synchronized關鍵字去解決,synchronized確實能夠幫助我們?nèi)ソ鉀Q并發(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),翻譯過來就是遠程過程調(diào)用,本文將為大家介紹如何基于HTTP協(xié)議實現(xiàn)簡單RPC框架,感興趣的小伙伴可以了解一下
    2023-06-06
  • 長度最小的子數(shù)組題目詳解(Java版)

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

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

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

    在Java中,ArrayList是最常用的集合之一。它是一種容器,它的內(nèi)部定義了一個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

最新評論

渝中区| 永德县| 大关县| 泗阳县| 峡江县| 贵溪市| 宜昌市| 行唐县| 若尔盖县| 红原县| 温宿县| 手游| 迭部县| 沙湾县| 明光市| 葫芦岛市| 双江| 晋江市| 高邑县| 洱源县| 亳州市| 林甸县| 霍城县| 罗定市| 股票| 株洲县| 柯坪县| 西吉县| 罗山县| 吴忠市| 铜川市| 偃师市| 西平县| 周口市| 西畴县| 西丰县| 西华县| 奉节县| 江川县| 乌拉特中旗| 靖远县|