Java Map Compute ComputeIfAbsent ComputeIfPresent方法

Compute,ComputeIfAbsent,ComputeIfPresent

简介

Compute为计算,即当前key的newValue值基于oldValue而得来,与merge方法类似,compute方法也可以自定义Function。

ComputeIfAbsentComputeIfPresent则是根据当前key是否存在,再做出compute的两种衍生方法,大体意思与Compute一致。

    default V compute(K key,
            BiFunction<? super K, ? super V, ? extends V> remappingFunction) {
        Objects.requireNonNull(remappingFunction);
        V oldValue = get(key);

        V newValue = remappingFunction.apply(key, oldValue);
        if (newValue == null) {
            // delete mapping
            if (oldValue != null || containsKey(key)) {
                // something to remove
                remove(key);
                return null;
            } else {
                // nothing to do. Leave things as they were.
                return null;
            }
        } else {
            // add or replace old mapping
            put(key, newValue);
            return newValue;
        }
    }

Compute示例:

        Map<String,StringBuffer> ve = new HashMap<>();
        //向Map插入元素
        ve.put("key",new StringBuffer("value1"));
        System.out.println(ve);
        ve.compute("key",(k,v)-> {
            if (v == null) return new StringBuffer();
            return v.append("dd");
        });
        ve.compute("key1",(k,v)-> new StringBuffer());

存在的key会走Function,不存在的key则会默认初始化

{key=value1}
{key1=, key=value1dd}

 

ComputeIfAbsent示例:

        Map<String,StringBuffer> ve = new HashMap<>();
        //向Map插入元素
        ve.put("key",new StringBuffer("value1"));
        ve.computeIfAbsent("keyAdd", k -> new StringBuffer());
        ve.computeIfAbsent("key",k -> new StringBuffer());

存在的key不作处理,不存在的key按照function处理

{key=value1, keyAdd=}

 

ComputeIfPresent:

        Map<String,StringBuffer> ve = new HashMap<>();
        //向Map插入元素
        ve.put("key",new StringBuffer("value1"));
        ve.computeIfPresent("key",(K,V) -> V.append("dd"));
        ve.computeIfPresent("key123",(K,V) -> V.append("dd"));
        System.out.println(ve);

存在的key作处理,不存在的key不处理,默认的方法也不会执行

{key=value1dd}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章