首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >一眼看穿flatMap和map的区别

一眼看穿flatMap和map的区别

原创
作者头像
用户3672714
发布2025-08-31 09:05:01
发布2025-08-31 09:05:01
1650
举报

map vs flatMap 一眼看懂

1️⃣ 核心概念

函数

功能

输出结果

map

一对一映射

每个元素映射成一个新元素

flatMap

一对多映射 + 扁平化

每个元素映射成一个集合/流,最终扁平成一个流


2️⃣ 通俗理解

  • map:把每个元素“变成别的东西”,结果是原来的大小一样

比喻:每个人穿上不同衣服,人数不变

  • flatMap:把每个元素“变成一个集合”,然后把所有集合合成一个大集合

比喻:每个人可能有多个爱好,把所有人的爱好合成一个列表


3️⃣ Java Stream 示例

示例数据

List<String> names = Arrays.asList("Alice", "Bob");

map 示例

List<Integer> nameLengths = names.stream()

.map(String::length) // 每个名字映射成长度

.collect(Collectors.toList());

System.out.println(nameLengths); // [5, 3]

  • 输入:["Alice", "Bob"]
  • 输出:[5, 3]
  • 元素一对一映射

flatMap 示例

假设每个人有多个爱好:

Map<String, List<String>> hobbies = new HashMap<>();

hobbies.put("Alice", Arrays.asList("reading","swimming"));

hobbies.put("Bob", Arrays.asList("running","gaming"));

List<String> allHobbies = hobbies.values().stream()

.flatMap(List::stream) // 每个 List 扁平化成一个 Stream

.collect(Collectors.toList());

System.out.println(allHobbies); // [reading, swimming, running, gaming]

  • 输入:[["reading","swimming"], ["running","gaming"]]
  • 输出:["reading","swimming","running","gaming"]
  • 元素一对多映射 + 扁平化

4️⃣ 总结规律

方法

输入

映射结果

最终 Stream

map

T

R

Stream

flatMap

T

Stream

Stream(扁平化)

  • 一句话

map 得到的是“流里套流”,flatMap 得到的是“平铺的流”


5️⃣ 小技巧记忆法

  1. map = 一变一:元素个数不变
  2. flatMap = 扁平 + 展开:元素可以变多
  3. 思路:想象每个元素被打开,如果每个元素里还有多个东西,用 flatMap 扁平化

如果你愿意,我可以帮你画一张 map vs flatMap 流程图,直观展示:

[元素1, 元素2]

map -> [结果1, 结果2]

flatMap -> [结果1a, 结果1b, 结果2a, 结果2b]

https://www.52runoob.com/archives/6413

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • map vs flatMap 一眼看懂
    • 1️⃣ 核心概念
    • 2️⃣ 通俗理解
    • 3️⃣ Java Stream 示例
      • 示例数据
      • map 示例
      • flatMap 示例
    • 4️⃣ 总结规律
    • 5️⃣ 小技巧记忆法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档