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}

 

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