我有两张地图:
Map<Integer, String> mapOne = {(1,"a"), (2, "b")};
Map<Integer, Double> mapTwo = {(1,10.0), (2,20.0)};
我想通过Integer值将这些地图合并为一个,所以结果图是
Map<String, Double> mapResult = {("a",10.0), ("b",20.0)};
有没有办法比在条目集上迭代更容易?
答案 0 :(得分:8)
假设两个映射的键匹配并且映射具有相同数量的条目,使用Java 8,您可以将它写在一行中:
Map<String, Double> map = mapOne.entrySet().stream()
.collect(toMap(e -> e.getValue(),
e -> mapTwo.get(e.getKey())));
所以你从第一张地图开始,创建一个新的地图,其中的键是mapOne的值,值是mapTwo中的相应值。
从技术上讲,这有点相当于迭代第一张地图的入口集。
注意:需要import static java.util.stream.Collectors.toMap;
答案 1 :(得分:1)
看起来只有迭代:
@Test
public void testCollection() {
Map<Integer, String> mapOne = new HashMap<Integer, String>();
mapOne.put(1, "a");
mapOne.put(2, "b");
Map<Integer, Double> mapTwo = new HashMap<Integer, Double>();
mapTwo.put(1, 10.0);
mapTwo.put(2, 20.0);
Map<String, Double> mapResult = new HashMap<String, Double>();
Set<Integer> keySet = mapOne.keySet();
keySet.retainAll(mapTwo.keySet());
for (Integer value : keySet) {
mapResult.put(mapOne.get(value), mapTwo.get(value));
}
System.out.println(mapResult);
}
答案 2 :(得分:0)
如果地图是相同的类型,您可以使用putAll()
,但由于您要更改键值对,看起来您将不得不迭代每个整数get()
从每张地图,然后put(mapOneVal,mapTwoVal)
for(int i=0;i<max;i++){
String key = mapOne.get(i);
Double val = maptwo.get(i);
if(key!=null && val!=null)
map3.put(key,val);
}