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

时间:2018-06-05 07:36:07

标签: java java-8

我有这段代码:

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)如果map包含key然后检索值 - 这是List - 并将元素添加到该列表(它可以有很多元素)

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

有没有办法使用Java 8减少冗长?

1 个答案:

答案 0 :(得分:2)

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