如果值为空,则删除键

sqougxex  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(329)

假设我们有一个 Map<Key, Collection<Value>> myMap 以及从与键关联的集合中移除值的方法。如果删除一个值会使集合为空,那么我们需要删除 key Map中的条目:

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;
}

有没有什么Java8方法可以用一行程序或更短的方法实现所描述的行为?

u1ehiz5o

u1ehiz5o1#

你可以用 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);
}
``` `computeIfPresent` 应用 `BiFunction` 如果当前值不是 `null` (如果是
null `computeIfPresent` 退货 `null` 立即),然后将值设置为 `BiFunction` 如果返回值不是 `null` 或者如果返回值为 `null` 最后返回新值。
请注意,它的行为与您所问的方法稍有不同-它不会删除已经为空的 `List` 从Map上看是因为 `remove` 会回来的 `false` . 如果要删除已空的 `List` 你可以用 `l.isEmpty() || (l.remove(value) && l.isEmpty())` .

相关问题