按键加入两张地图
我有两张地图:
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