首页 > 解决方案 > 将两张不同类型的地图合并为一张地图

问题描述

我有两张不同类型的地图:

class Type3{
  Type1 type1;
  Type2 type2;

// getters and setters...

}


Map<Integer,Type1> map1;
Map<Integer,Type2> map2;

我想用同一个键将它们合并到一张地图上。像他的:
Map<Integer,Type3> map3 = // merege map1,map2.

我该怎么做?

标签: java

解决方案


你可以用Streams 做到这一点:

Map<Integer,Type3> output =
    map1.entrySet()
        .stream()
        .collect(Collectors.toMap(Map.Entry::getKey,
                                  e -> new Type3(e.getValue(),map2.get(e.getKey()))));

假设Type3有一个接受Type1实例和Type2实例的构造函数。

请注意,输出Map将仅包含出现在第一个Map( map1) 中的键。

如果两个输入Maps 可能具有另一个映射中不存在的键,则最好通过两个 s 的键集的并集进行流式传输Map,以免跳过任何键:

Set<Integer> allKeys = new HashSet<> (map1.keySet());
allKeys.addAll(map2.keySet());
Map<Integer,Type3> output =
    allKeys.stream()
           .collect(Collectors.toMap(Function.identity(),
                                     key -> new Type3(map1.get(key),map2.get(key))));

推荐阅读