集合映射的一个非常常见的操作是在键不存在时创建一个具有初始值的新集合,或者如果键存在,则对现有集合执行一些功能。以 Map<String, Set<Integer>>
为例,如果键不存在,则创建一个初始值为 1 的集合。如果键存在,则将值 map.size()+1 添加到集合中(或将此函数替换为其他一些简单的单行操作).在 Java 7 中,使用 if/else 很简单,但非常冗长。我只能想出下面的 Java 8 代码,它并没有好多少(实际上更糟,因为代码行更多)。有没有办法让它更简洁?
public void process(Map<String, Set<Integer>> m, String key) {
m.compute(key, (k, v) -> {
if (v == null) {
v = new HashSet<>();
v.add(1);
return v;
} else {
v.add(v.size() + 1);
return v;
}
});
}
最佳答案
这是另一种选择:
Set<Integer> set = m.computeIfAbsent (key , k -> new HashSet<> ());
set.add(set.size() + 1);
这是两个衬里(而不是一个)的唯一原因是需要获取 Set
的当前大小,以便决定向其中添加哪个值。
关于java - 在 Java 8 中是否有更简洁的方法来执行此操作 - map 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57044940/