Java源碼分析-Java 8 Map接口新增方法merge解析

如果傳入的key對應的值爲空就使用新值替換null保存到Map中,如果Map中不包含該key,就將key和新值value保存到Map中。如果傳入的key對應的值不爲空,那麼就將該值和新傳入的值作爲計算函數remappingFunction的入參進行計算,返回計算後新的值。如果計算後的值爲空,就刪除該key,如果不爲空就將計算後的值代替舊值保存到Map中。

default V merge(K key, V value,BiFunction<? super V, ? super V, ? extends V> remappingFunction) {
    //強制傳入的計算方法remappingFunction不能爲空
    Objects.requireNonNull(remappingFunction);
    //強制傳入作爲的計算的值value不能爲空
    Objects.requireNonNull(value);
    //根據傳入的key獲取對應的值,存做舊值。
    V oldValue = get(key);
    //判斷舊值是否爲空,這裏包含兩種情況:1. Map中本來就不包含該key 2. 該key對應的值就是null
    //如果舊oldValue值爲空,就使用傳入的value作爲新值,否則使用計算方法remappingFunction將舊值和新值作爲參數進行計算,返回計算結果作爲新值。
    V newValue = (oldValue == null) ? value :
               remappingFunction.apply(oldValue, value);
   //如果新值爲空,就直接刪除該key,否則就將key和新值存入到Map中
   if(newValue == null) {
        remove(key);
    } else {
        put(key, newValue);
    }
    //最後返回新值
    return newValue;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章