按键加入两张地图

我有两张地图:

Map mapOne = {(1,"a"), (2, "b")}; Map mapTwo = {(1,10.0), (2,20.0)}; 

我希望通过Integer值将这些映射组合成一个,所以结果映射是

 Map mapResult = {("a",10.0), ("b",20.0)}; 

有没有办法比迭代条目集更容易做到这一点?

假设两个映射的键匹配并且映射具有相同数量的条目,使用Java 8,您可以将它写在一行中:

 Map map = mapOne.entrySet().stream() .collect(toMap(e -> e.getValue(), e -> mapTwo.get(e.getKey()))); 

因此,您从第一个地图开始并创建一个新地图,其中键是mapOne的值,值是mapTwo中的对应值。

从技术上讲,这有点相当于迭代第一个映射的入口集。

注意:需要import static java.util.stream.Collectors.toMap;

看起来只是迭代:

 @Test public void testCollection() { Map mapOne = new HashMap(); mapOne.put(1, "a"); mapOne.put(2, "b"); Map mapTwo = new HashMap(); mapTwo.put(1, 10.0); mapTwo.put(2, 20.0); Map mapResult = new HashMap(); Set keySet = mapOne.keySet(); keySet.retainAll(mapTwo.keySet()); for (Integer value : keySet) { mapResult.put(mapOne.get(value), mapTwo.get(value)); } System.out.println(mapResult); } 

如果映射是相同的类型,您可以使用putAll() ,但由于您正在更改键值对,看起来您将不得不迭代每个整数,每个映射get() ,然后put(mapOneVal,mapTwoVal)

 for(int i=0;i