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

xiozqbni  于 2023-02-07  发布在  Java
关注(0)|答案(3)|浏览(228)

我有这样一段代码:

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包含键,则检索值(即List),并向列表添加元素(它可能已经有很多元素)
2)如果map不包含键,则创建新列表,向新创建的列表添加元素,并将该元素(键,值)放入map
使用Java8有什么方法可以使它不那么冗长吗?

taor4pac

taor4pac1#

java 8在Map接口中添加了computeIfAbsent,它完全符合您的要求:

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

dced5bon2#

对@misha answer的一些补充。
我们可以使用两个选项:

Map<Integer, List<String>> map = new HashMap<>();

1.计算如果不存在(首选)

map.computeIfAbsent(1, ArrayList::new).add("b");

1.计算

map.compute(1, (k, v) -> {
            v = v != null ? v : new ArrayList<>();
            v.add("b");
            return v;
        });
63lcw9qa

63lcw9qa3#

我的工作是:

map.compute(key, (k, v) -> {
            v = v != null ? new ArrayList<>(v) : new ArrayList<>();
            v.add("text");
            return v;
        });

相关问题