设置为值的Java 8地图计算

Sud*_*ddy 4 java-8

我的地图看起来像这样

private Map<String, LinkedHashSet<String>> map = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

在传统方法中,我可以通过按键检查为地图添加价值,如下所示

public void addEdge(String node1, String node2) {
        LinkedHashSet<String> adjacent = map.get(node1);
        if (adjacent == null) {
            adjacent = new LinkedHashSet();
            map.put(node1, adjacent);
        }
        adjacent.add(node2);
    }
Run Code Online (Sandbox Code Playgroud)

使用Java 8,我可以做这样的事情,与此同时我也得到相同的输出。

map.compute(node1, (k,v)-> {
            if(v==null) {
                v=new LinkedHashSet<>();
            }
            v.add(node2);
            return v;
            });
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来处理Java 8?

4ca*_*tle 6

使用

map.computeIfAbsent(node1, k -> new LinkedHashSet<>()).add(node2);
Run Code Online (Sandbox Code Playgroud)

如果node1已在地图中找到,则等同于:

map.get(node1).add(node2);
Run Code Online (Sandbox Code Playgroud)

如果node1尚未在地图中,则等同于:

map.put(node1, new LinkedHashSet<>()).add(node2);
Run Code Online (Sandbox Code Playgroud)

这正是您要寻找的,甚至在文档中被描述为用例。