Java итерация по карте <строка, список <строка>, метод getordefault - PullRequest
0 голосов
/ 25 июня 2018

У меня есть карта >. Я пытаюсь добавить строку к значению карты, если список присутствует, иначе создать список и добавить его в список и вставить в map.s1, s2 - это строки.

Код:

Map<String, List<String>> map = new HashMap<>();

map.put(s1,(map.getOrDefault(s1, new LinkedList<String>())).add(s2));

Ошибка:

error: incompatible types: boolean cannot be converted to List<String>

Что не так с этим !!!

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

метод добавления списка 'map.getOrDefault (s1, new LinkedList ())). Add (s2)' возвращает логическое значение, поэтому вы должны сделать это в отдельной строке

, поэтому попробуйте вот так

    Map< String, List< String>> map = new HashMap<>();

    List<String> list = map.get(s1);
    if(list == null){
      list = new LinkedList<>();
      map.put(s1,list);
    }
    list.add(s2);

Если использовать Java 8 и нужно сделать в одну строку, сделайте так

    map.computeIfAbsent(s1, k -> new LinkedList<>()).add(s2); 
0 голосов
/ 25 июня 2018

Этот вызов

(map.getOrDefault(s1, new LinkedList())).add(s2)

Возвращает boolean примитив, который нельзя преобразовать в List.Вот почему вы получаете эту ошибку.

Вы можете решить ее следующим образом:

map.compute(s1, (k, v) -> v == null ? new LinkedList<>() : v).add(s2);

Хитрость в том, что map.compute() возвращает новое значение, связанное с указанным ключом, а затемвы можете добавить в него строковый литерал s2.

...