假设我们有一个Map<Key, Collection<Value>> myMap方法可以从与键关联的集合中删除一个值.如果删除一个值会使集合变空,我们想要删除key地图中的条目:
List<Value> removeValue(Key key, Value value) {
List<Value> v = myMap.get(key);
if (v != null) {
v.remove(value);
if (v.isEmpty())
myMap.remove(key);
}
return v;
}
Run Code Online (Sandbox Code Playgroud)
是否有任何Java 8方法通过单线程或更短的方法来实现所描述的行为?
你可以使用computeIfPresent这个:
static <K, V> List<V> removeValue(K key, V value, Map<K, List<V>> map){
return map.computeIfPresent(key, (k, l) -> l.remove(value) && l.isEmpty() ? null : l);
}
Run Code Online (Sandbox Code Playgroud)
computeIfPresent施加BiFunction到键和在地图中的当前值,如果该值不是null(如果它是null computeIfPresent返回null立即),然后或者将值设置到的返回值BiFunction,如果返回值不是null或删除从地图如果密钥返回值是null,最后返回新值.
请注意,它的行为与您提出的方法略有不同 - 它不会List从地图中删除已经为空的因为remove将返回false.如果你想删除已经空的List你可以使用l.isEmpty() || (l.remove(value) && l.isEmpty()).
| 归档时间: |
|
| 查看次数: |
859 次 |
| 最近记录: |