加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如果value为空,则删除键

发布时间:2020-12-15 04:34:11 所属栏目:Java 来源:网络整理
导读:假设我们有一个Map Key,Collection Value myMap和从与键关联的集合中删除值的方法.如果删除值使集合为空,我们想要删除映射中的键条目: ListValue removeValue(Key key,Value value) { ListValue v = myMap.get(key); if (v != null) { v.remove(value); if
假设我们有一个Map< Key,Collection< Value>> myMap和从与键关联的集合中删除值的方法.如果删除值使集合为空,我们想要删除映射中的键条目:

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

是否有任何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);
}

如果值不为null,则computeIfPresent将BiFunction应用于键和映射中的当前值(如果它为null,则computeIfPresent立即返回null),如果返回值不为null,则将值设置为BiFunction的返回值如果返回值为null,则从地图中删除键,最后返回新值.

请注意,它的行为与您提出的方法略有不同 – 它不会从地图中删除已经空的List,因为remove将返回false.如果要删除已经空的List,可以使用l.isEmpty()|| (l.remove(value)&& l.isEmpty()).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读