java合并map
❶ 面试官:Java 8 map 和 flatMap 的区别大部分人答不上来!
栈长在面试中常问Java 8中map和flatMap的区别,大部分人答不上来。这里所讨论的map和flatMap并非集合,而是Stream接口中的方法。它们可以帮助你更高效地处理数据流。
Map方法的主要作用是对流中的每个元素进行转换。假设你有一个包含字符串的List,现在你想将每个元素后面添加一个前缀"---"。可以通过以下步骤实现:
- 将List转换为Stream。
- 调用Stream的map方法对每个元素执行封装操作。
- 将Stream转换回List。
执行后,输出结果会是每个元素后面加有"---"的字符串行表。如果List中的元素是整数,可以直接使用内置的mapToXxx方法,例如mapToLong。这会将流转换为LongStream,然后可以进行更多基于整数的操作。
FlatMap方法的作用是将流中的元素进行平铺,形成多个流合并成一个流。如果有一个包含字符串数组的List,使用FlatMap后,会将所有数组元素合并成一个流,元素数量为所有数组元素的总和。
总结来说,Map适用于简单元素转换,FlatMap适用于数组流的平铺合并。理解这些方法的应用场景,可以帮助你在项目中更高效地使用Stream。
希望你通过阅读本文能够掌握map和flatMap的区别,并在项目中加以应用。如果你还有Java 8的知识点想要学习,可以关注Java技术栈,获取更多关于Java 8+系列教程。本文所有示例代码已上传至GitHub,欢迎访问学习。
❷ Java8 中 List 转 Map(Collectors.toMap) 使用技巧
实际项目中,将 List 转换为 Map 是常见操作。过去可能通过 for 循环完成,而 Java8 引入了 Stream 特性,简化了这类操作。例如:
定义类:
创建 List:
目标 Map 结构为:
过去实现方式(循环):
利用 Java8 特性,上述操作可简化为:
若需 Map 的 value 为对象自身,可相应调整:
Collectors.toMap 方法具有三个重载版本,其参数含义如下:
如上例,当 List 中的 userId 重复时,原方法会引发异常。此时,应调用第二个重载版本,加入合并函数:
输出结果:
若希望 Map 按 Key 排序返回,可自定义返回 Map 类型,例如:
输出结果: