函数 | 功能 | 输出结果 |
|---|---|---|
map | 一对一映射 | 每个元素映射成一个新元素 |
flatMap | 一对多映射 + 扁平化 | 每个元素映射成一个集合/流,最终扁平成一个流 |
比喻:每个人穿上不同衣服,人数不变
比喻:每个人可能有多个爱好,把所有人的爱好合成一个列表
List<String> names = Arrays.asList("Alice", "Bob"); |
|---|
List<Integer> nameLengths = names.stream() |
|---|
.map(String::length) // 每个名字映射成长度 |
|---|
.collect(Collectors.toList()); |
|---|
System.out.println(nameLengths); // [5, 3] |
|---|
["Alice", "Bob"][5, 3]假设每个人有多个爱好:
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"]方法 | 输入 | 映射结果 | 最终 Stream |
|---|---|---|---|
map | T | R | Stream |
flatMap | T | Stream | Stream(扁平化) |
map得到的是“流里套流”,flatMap得到的是“平铺的流”
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 删除。