Невозможно добавить значения в мою вложенную HashMap - PullRequest
0 голосов
/ 27 мая 2020

Я хочу получить доступ к своим парам ключ-значение в моей HashMap, и если он соответствует конкретному ключу, я добавлю элементы к соответствующему значению, которое является HashMap.

Но это просто не работает. Есть ли проблемы в этом коде?

«for-l oop» отлично работает, когда используется невложенный HashMap.

import java.util.Map;
import java.util.HashMap;

Map<String, Map<String,Integer>> map = new HashMap<>();
map ==> {}

map.put("one", new HashMap<>())
$4 ==> null

map.put("two", new HashMap<>())
$5 ==> null

map.put("three", new HashMap<>())
$6 ==> null

for (Map.Entry e : map.entrySet()) {
    if (e.getKey().equals("two")) {
         e.getValue()).put("Tony", 123);
    }
}

Error:
cannot find symbol
   symbol: method put(java.lang.String,int)
  (e.getValue()).put("Tony", 123);
  ^_ _ _ _ _ _ _ _ _^

1 Ответ

0 голосов
/ 27 мая 2020

То, как вы объявляете управляющую переменную l oop, e, не позволяет e.getValue() возвращать распознаваемое значение.

Вам необходимо параметризовать Map.Entry:

for (Map.Entry<String, Map<String, Integer>> e : map.entrySet()) {
    if (e.getKey().equals("two")) {
        e.getValue().put("Tony", 123);
    }
}

Начиная с Java 10, вы также можете использовать var, что немного чище:

for (var e : map.entrySet()) {
    if (e.getKey().equals("two")) {
        e.getValue().put("Tony", 123);
    }
}
...