[英]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<>();
map.computeIfAbsent(1, ArrayList::new).add("b");
map.compute(1, (k, v) -> {
v = v != null ? v : new ArrayList<>();
v.add("b");
return v;
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.