首页 > 解决方案 > 如何使用流对地图进行深度复制?

问题描述

最简单的方法是循环,但这会很冗长,我更喜欢 Java 8 的更简洁的解决方案。

这个帖子在这里推荐

mapCopy = map.entrySet().stream()
    .collect(Collectors.toMap(e -> e.getKey(), e -> List.copyOf(e.getValue())))

用于复制HashMap<Integer, List>,但我所拥有的是HashMap<String, HashMap<String, Integer>。我也为列表尝试了上述方法,但出于某种原因,即使 IntelliJ 自动将其预测为有效方法e.getKey()e.getValue()两者都“无法解决”,并e引用了Map.Entry

我不太擅长使用流,所以我不知道为什么上面的方法不起作用,或者如何完成我想要的。

标签: javajava-stream

解决方案


您可以使用HashMap构造函数为原始Map.

Map<String, Map<String, Integer>> result = map.entrySet().stream()
   .collect(Collectors.toMap(Map.Entry::getKey, e -> new HashMap<>(e.getValue())));

推荐阅读