java遍历map <string,list <string>,getordefault方法

时间:2018-06-25 03:03:18

标签: java list generics java-8

我有一个<字符串,列表<字符串类型>>的映射, 我想做的是,如果存在列表,则将一个字符串添加到映射值,否则创建一个列表并将其添加到列表中,然后插入map中。 s1s2是字符串。

代码:

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>

这是怎么了!!!

3 个答案:

答案 0 :(得分:6)

列表'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); 

答案 1 :(得分:1)

此电话

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

返回一个boolean原语,该原语不能转换为List。这就是为什么出现此错误的原因。

您可以像这样解决它,

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

这里的窍门是,map.compute()返回与指定键关联的新值,然后可以在其后添加s2 String文字。

答案 2 :(得分:0)

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

// gets the value if it is present in the map else initialze the list
List<String> li = map.getOrDefault(s1,new LinkedList<>());

li.add(s2);

map.put(s1,li);