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

class Type3{
  Type1 type1;
  Type2 type2;

// getters and setters...

}


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


我想通过相同的键将它们合并到一张地图。
喜欢他的:
Map<Integer,Type3> map3 = // merege map1,map2.

我该怎么做?

最佳答案

您可以使用Stream来做到这一点:

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将仅包含出现在第一个Mapmap1)中的键。

如果两个输入Map的键都可能不在另一个映射中,则最好流传输两个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))));

10-07 16:06