繁体   English   中英

计算地图 - 将元素添加到现有列表或创建新列表并添加到其中

[英]Compute map - add element to existing List or create new List and add to it

我有这段代码:

private static void computeMapAddition(Map<String, List<XXX>> objectMap,
    XXX objectToAdd, String key) {
    if (objectMap.containsKey(key)) {
        List<XXX> objectList = objectMap
            .get(key);
        objectList.add(objectToAdd);
    } else {
        List<XXX> objectList = new ArrayList<>();
        objectList.add(objectToAdd);
        objectMap.put(key, objectList);
    }
}

这段代码的作用:

1)如果地图包含键然后检索值 - 这是列表 - 并将元素添加到该列表(它可能已经有很多元素)

2)如果地图不包含键,则创建新列表,将元素添加到新创建的列表中并将(键,值)放入地图

有什么方法可以减少使用 Java 8 的冗长吗?

java 8 将computeIfAbsent添加到Map接口。 它完全符合您的要求:

// return the list if already present or make a new one, insert into the map 
// and return the newly created one
List<XXX> objectList = objectMap.computeIfAbsent(key, k -> new ArrayList<>());

// add new object to list
objectList.add(objectToAdd);

或者你可以将它组合在一起

objectMap.computeIfAbsent(key, k -> new ArrayList<>()).add(objectToAdd);

@misha 答案的一些补充。

我们可以使用两个选项:

 Map<Integer, List<String>> map = new HashMap<>();
  1. computeIfAbsent (首选)
 map.computeIfAbsent(1, ArrayList::new).add("b");
  1. 计算
 map.compute(1, (k, v) -> {
            v = v != null ? v : new ArrayList<>();
            v.add("b");
            return v;
        });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM