java8 map如何简单地将一些元素添加到列表值

zhu*_*wei 0 java-8

我想用来Map<String, List<String>>记录一些东西,比如每个城市都有多少用户.

现在我的代码是

    Map<String, List<String>> map = new HashMap<>();
    if(map.get("city_1")==null){
        map.put("city_1", new ArrayList<>());
    }
    map.get("city_1").add("aaa");
Run Code Online (Sandbox Code Playgroud)

但我觉得这有点麻烦,我想要这个效果

    Map<String, List<String>> map = new HashMap<>();
    map.compute("city_1", (k,v)->v==null?new ArrayList<>():v.add("aaa"));
Run Code Online (Sandbox Code Playgroud)

但它有编译错误:

Type mismatch: cannot convert from boolean to List<String>
Run Code Online (Sandbox Code Playgroud)

那么有任何其他方式可以简化它吗?

gre*_*449 10

用途computeIfAbsent:

map.computeIfAbsent(work, k -> new ArrayList<>()).add("aaa");
Run Code Online (Sandbox Code Playgroud)

如果新列表尚不存在,则会在地图中存储新列表并返回新列表或现有列表.