当前位置: 首页 > java >正文

Stream流中的Map与flatMap的区别

Map与flatMap的基本概念

Map用于将流中的每个元素通过指定函数转换为另一个元素,生成一个一对一映射的新流。例如将字符串流转换为对应长度流:

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"]

核心区别对比

  • 输入输出关系
    Map保持原始流元素数量不变,flatMap可能改变元素数量(如拆分为多个子流后合并)

  • 返回值要求
    Map的Function返回普通对象,flatMap的Function必须返回Stream对象

  • 数据结构处理
    Map适合单一元素转换,flatMap适合处理嵌套集合(如List<List>)

典型应用场景

Map适用场景
数据类型转换(String→Integer)、属性提取(对象→ID)、简单计算(数值→平方值)

flatMap适用场景

  • 合并多个集合:List<List<Integer>> → List<Integer>
  • 分解复合结构:字符串句子→单词流、树节点→子树节点流
  • 过滤后展开操作:先filter再flatMap处理有效数据

性能注意事项

flatMap涉及流合并操作,可能产生更多临时对象。对于简单转换优先使用map,多层嵌套数据结构才使用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());
http://www.xdnf.cn/news/18864.html

相关文章:

  • AI安全监控与人才需求的时间悖论(对AI安全模型、AI安全人才需求的一些思考)
  • 前沿技术借鉴研讨-2025.8.26(多任务分类/预测)
  • 基于CentOS7:Linux服务器的初始化流程
  • 从零开始学MCP(7) | 实战:用 MCP 构建论文分析智能体
  • Java 大视界 -- Java 大数据机器学习模型在金融市场波动预测与资产配置动态调整中的应用
  • Docker:部署Java后端
  • 【笔记】大模型业务场景流程综述
  • Text to Speech技术详解与实战:GPT-4o Mini TTS API应用指南
  • 大数据毕业设计选题:基于大数据的用户贷款行为数据分析系统Spark SQL核心技术
  • SQL server 触发器的使用
  • defineCustomElement 的局限性及重载需求分析
  • Ubuntu 虚拟机配置 Git 并推送到Gitee
  • 如何利用Claude在商业项目中进行自动化客户反馈分析:一站式解决方案
  • 【R代码分析】甲烷排放绘制代码-参考论文
  • Unity游戏打包——Mac基本环境杂记
  • 实时平台Flink热更新技术——实现不停机升级!
  • 从16个粉丝到680万年收入:AI创业的117天奇迹
  • 负载均衡之带权重的随机负载均衡算法详解与实现
  • 迷你版Shell:源码详解与行为解析
  • S-HUB实现泛微E9与飞书对接
  • kafka消费顺序保障
  • 【车载开发系列】CS+ for CC开发环境IDE
  • Flask模块如何使用
  • HIDL的Car Audio架构简单梳理
  • 《2025年Windows最新最细IDE激活码永久破解教程 – 支持JetBrain全家桶2099年授权》
  • 电脑快速关机工具,一键重启休眠
  • Debian Buster 软件源失效问题
  • vue2+elementui 表格单元格增加背景色,根据每列数据的大小 颜色依次变浅显示2
  • zookeeper-保姆级配置说明
  • 深度学习篇---ResNet-18网络结构