我正在尝试重做我的一些方法,使它们使用Java 8更加简洁,我试图慢慢吸收它的新功能。
这是一种添加方法的方法 value
到了 Map<Key, Set<Value>>
。有三个可能性:
- 密钥不存在:添加密钥并将包含该值的新集合与其关联。
- 密钥存在:该值将添加到现有集合中。请注意,一组永远不会
null
因为我有一些先决条件来解决这个问题。 - 密钥存在且值已包含在集合中:a
IllegalArgumentException
被抛出。
实现此行为的代码如下,并且它不使用Java 8功能:
public void addValue(Key key, Value value) {
// irrelevant preconditions...
Set<Value> valuesForKey = myMap.get(key);
if (valuesForKey != null && valuesForKey.contains(value))
throw new IllegalArgumentException("Association exists already");
if (valuesForKey == null)
myMap.put(key, new HashSet<Value>(Arrays.asList(value)));
else
valuesForKey.add(value);
}
我想使用Java 8方法缩短此代码 computeIfAbsent。
我可以总结一下 if-else
阻止,但我无法通过设置的值的冗余 key
映射到执行前置条件检查时已经被检索。
public void addValue(Key key, Value value) {
// irrelevant preconditions...
Set<Value> valuesForKey = myMap.get(key);
if (valuesForKey != null && valuesForKey.contains(value))
throw new IllegalArgumentException("Association exists already");
myMap.computeIfAbsent(key, v -> new HashSet<Value>()).add(value);
}
无论如何我可以在一条指令中合并所有这些吗?