【问题标题】:Java 8 map compute with set as valueJava 8 地图计算,设置为值
【发布时间】:2017-04-02 00:26:05
【问题描述】:

我的地图是这样的

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

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

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);
    }

使用 java 8,我可以做这样的事情,使用这个我也得到相同的输出。

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

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

【问题讨论】:

标签: java-8


【解决方案1】:

使用

map.computeIfAbsent(node1, k -> new LinkedHashSet<>()).add(node2);

如果node1已经在地图中找到,则相当于:

map.get(node1).add(node2);

如果node1 不在地图中,则相当于:

map.put(node1, new LinkedHashSet<>()).add(node2);

这正是您正在寻找的,甚至在documentation 中被描述为一个用例。

【讨论】:

    【解决方案2】:

    你也可以使用

    map.merge(node1,new LinkedHashSet<>(),(v1,v2)->v1!=null?v1:v2).add(node2);
    

    还有

    map.compute(node1,(k,v)->v!=null?v:new LinkedHashSet<>()).add(node2);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      • 2014-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多