Сравнение двух хэш-карт с равными ключами и проверка более высокого значения - PullRequest
0 голосов
/ 20 октября 2018

У меня есть два 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");

Hashmap C с уникальным ключом и большими значениями. Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 20 октября 2018

Вы можете сделать это так,

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}
0 голосов
/ 20 октября 2018
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());
      }
        }
0 голосов
/ 20 октября 2018
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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...