java迭代map <string,list <string>,getordefault方法

Rob*_*ood 2 java generics list java-8

我有一个<string,List <String type >>的映射,我想要做的是如果列表存在则添加一个字符串来映射值,否则创建一个列表并将其添加到列表并插入map. s1,s2是字符串.

码:

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

map.put(s1,(map.getOrDefault(s1, new LinkedList<String>())).add(s2));
Run Code Online (Sandbox Code Playgroud)

错误:

error: incompatible types: boolean cannot be converted to List<String>
Run Code Online (Sandbox Code Playgroud)

这有什么问题!!!

jan*_*024 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);
Run Code Online (Sandbox Code Playgroud)

如果使用java 8并且需要在单行中做这样的事情

    map.computeIfAbsent(s1, k -> new LinkedList<>()).add(s2); 
Run Code Online (Sandbox Code Playgroud)