我有两个HashMaps
Map<String, String> mapA = new HashMap<>();
mapA.put("A", "1");
mapA.put("B", "3");
mapA.put("C", "1");
mapA.put("D", "5");
Map<String, String> mapB = new HashMap<>();
mapB.put("A", "2");
mapB.put("B", "2");
mapB.put("C", "4");
mapB.put("D", "2");
如何获得下面的输出?
Map<String, String> mapC = new HashMap<>();
mapC("A", "2");
mapC("B", "3");
mapC("C", "4");
mapC("D", "5");
具有唯一键和较大值的哈希图C。谢谢。
答案 0 :(得分:4)
您可以这样做
Map<String, Integer> keyToMaxValue = Stream.of(mapA, mapB)
.flatMap(m -> m.entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey,
e -> Integer.valueOf(e.getValue()), Integer::max));
这是输出:
{A=2, B=3, C=4, D=5}
答案 1 :(得分:0)
Map<objA, objB> mapA = new HashMap<objA, objB>();
mapA.put("A", "1");
mapA.put("B", "3");
mapA.put("C", "1");
mapA.put("D", "5");
Map<objA, objB> mapB = new HashMap<objA, objB>();
mapA.put("A", "2");
mapA.put("B", "2");
mapA.put("C", "1");
mapA.put("B", "1");
mapA.put("D", "2");
mapA.put("C", "4");
Map<objA, objB> mapC = HashMap<objA, objB>) mapA.clone();
for(Map.Entry m:mapA.entrySet()){
if(m.getValue()>mapB.get(m.getKey())){
mapC.put(m.getKey(),m.getValue());
}
}
用于比较和设置新哈希图的代码段
for(Map.Entry m:mapA.entrySet()){
if(m.getValue()>mapB.get(m.getKey())){
mapC.put(m.getKey(),m.getValue());
}
}
答案 2 :(得分:-1)
Map<String, String> mapA = new HashMap<String, String>();
mapA.put("A", "1");
mapA.put("B", "3");
mapA.put("C", "1");
mapA.put("D", "5");
Map<String, String> mapB = new HashMap<String, String>();
mapB.put("A", "2");
mapB.put("B", "2");
mapB.put("C", "1");
mapB.put("B", "1");
mapB.put("D", "2");
Map<String, String> mapC = Stream.of(mapA, mapB)
.flatMap(m -> m.entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue(), (s1, s2) -> Integer.parseInt(s1) > Integer.parseInt(s2) ? s1 : s2));
System.out.println(mapC);