比较两个哈希图以相等的键并检查更高的值

时间:2018-10-20 04:37:53

标签: java hashmap comparison

我有两个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。谢谢。

3 个答案:

答案 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);