You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Java Stream API将嵌套Map转换为单层Map?

使用Stream API转换嵌套Map为单层Map

当然可以用Stream API实现这个转换,而且能和你原来的forEach + putAll行为完全一致(即内层Map存在重复键时,后处理的键值对会覆盖先处理的)。

实现代码(Java 8+)

Map<String, String> result = myMap.values()
    .stream()
    .flatMap(innerMap -> innerMap.entrySet().stream())
    .collect(Collectors.toMap(
        Map.Entry::getKey,
        Map.Entry::getValue,
        (oldVal, newVal) -> newVal // 重复键时保留后出现的值,和putAll逻辑对齐
    ));

代码说明

  1. myMap.values().stream():先获取外层Map中所有内层Map的流
  2. flatMap(...):把每个内层Map的键值对(Entry)展开成一个连续的Entry流
  3. Collectors.toMap(...):将Entry流收集为单层Map,第三个参数是冲突解决策略,这里指定用新值覆盖旧值,和你原来的putAll逻辑完全匹配——因为putAll会按外层Map的遍历顺序,后面的内层Map的键会覆盖前面的。

Java 9+ 更简洁的写法

如果用Java 9及以上,可以用Collectors.flatMapping直接在收集阶段展开流,代码更紧凑:

Map<String, String> result = myMap.values()
    .stream()
    .collect(Collectors.flatMapping(
        innerMap -> innerMap.entrySet().stream(),
        Collectors.toMap(
            Map.Entry::getKey,
            Map.Entry::getValue,
            (oldVal, newVal) -> newVal
        )
    ));

注意事项

如果能确保所有内层Map的键都不重复,可以省略toMap的第三个参数,但建议保留——一旦出现重复键,没有冲突策略会直接抛出IllegalStateException,不如提前指定符合业务逻辑的处理方式。

内容的提问来源于stack exchange,提问作者Marko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:50:38