Сравните два HashMap и умножьте значения карты - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть два HashMap, и давайте скажем, что они имеют следующие значения:

 HashMap1 : <x, 1>, <y, 2>, <z, 3>

 HashMap2 : <x,10>, <y, 20>, <z,30>

Я хочу умножить соответствующие значения, а затем сложить эти значения как: 1 * 10 + 2 * 20 + 3 * 30. Однако я не уверен, должен ли я использовать 2 цикла или какую-то другую итерацию. Я использую один l oop, но это не решило проблему:

for (Map.Entry<Character, Integer> entry : map1.entrySet()) {
    int sum=0;
    if(map2.containsKey(entry.getKey())) {
        sum+=entry.getValue() * ...; //it gets map1 values but I also need map2 values to multiply
    }
}

Как это исправить?

1 Ответ

2 голосов
/ 30 апреля 2020

До Java 8:

int sum = 0;
for (Map.Entry<String, Integer> entry : map1.entrySet()) {
    sum += entry.getValue() * map2.getOrDefault(entry.getKey(), 1);
}

Начиная с Java 8:

int sum = map1.entrySet().stream()
   .mapToInt(e -> e.getValue() * map2.getOrDefault(e.getKey(), 1)).sum();

Примечание:
Вам также необходимо обрабатывать ключи, которые отличаются между двумя картами. Я предположил, что эти две карты содержат абсолютно одинаковые ключи. Просто для простоты и ясности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...