當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java HashMap compute()用法及代碼示例


HashMap類的compute(Key,BiFunction)方法允許您更新HashMap中的值。 compute()方法嘗試為指定的鍵及其當前映射值計算映射(如果找不到當前映射,則為null)。此方法用於原子更新HashMap中給定鍵的值。

  • 如果在compute中傳遞的重映射函數返回null,則將映射從Map中刪除(如果最初不存在,則保持不存在)。
  • 如果重映射函數引發異常,則異常為re-thrown,並且當前映射保持不變。
  • 在計算過程中,重新映射函數應該不能修改此映射。
    compute()方法可用於更新HashMap中的現有值。
    例如,

    Mapping to increment a int value of mapping: map.compute(key, (k, v) -> (v == null) ? 1 : v+1)



  • 如果compute()方法的重映射函數在計算過程中修改了此映射,則此方法的默認實現無法保證檢測到錯誤。

異常:
如果在計算期間檢測到映射更改,則此方法的非並行實現應重寫此方法並引發ConcurrentModificationException。如果在計算期間檢測到映射中的更改,並發實現應重寫此方法,並拋出IllegalStateException,結果計算將永遠無法完成。

此方法的默認實現不保證此方法的同步性或原子屬性。提供原子性保證的任何實現都必須重寫此方法並記錄其並發屬性。

用法:

default V 
       compute(K key,
             BiFunction<? super K, ? super V, ? 
                 extends V> remappingFunction)

參數:此方法接受兩個參數:

  • key:與值相關聯的鍵。
  • remappingFunction:用於計算值的函數。

返回值:此方法返回與指定鍵關聯的新值;如果沒有,則返回null。

異常:該方法拋出:

  • NullPointerException :如果鍵為null且此映射不支持空鍵,或者remappingFunction為null。
  • UnsupportedOperationException:如果此Map不支持put操作。
  • ClassCastException:如果鍵或值的類阻止其存儲在此映射中。
  • IllegalArgumentException:如果鍵或值的某些屬性阻止將其存儲在此映射中。

以下示例程序旨在說明compute(Key,BiFunction)方法:

示例1:

// Java program to demonstrate 
// compute(Key, BiFunction) method. 
  
import java.util.*; 
  
public class GFG { 
  
    // Main method 
    public static void main(String[] args) 
    { 
  
        // Create a Map and add some values 
        Map<String, String> map = new HashMap<>(); 
        map.put("Name", "Aman"); 
        map.put("Address", "Kolkata"); 
  
        // Print the map 
        System.out.println("Map: " + map); 
  
        // remap the values using compute() method 
        map.compute("Name", (key, val) 
                                -> val.concat(" Singh")); 
        map.compute("Address", (key, val) 
                                   -> val.concat(" West-Bengal")); 
  
        // print new mapping 
        System.out.println("New Map: " + map); 
    } 
}
輸出:
Map: {Address=Kolkata, Name=Aman}
New Map: {Address=Kolkata West-Bengal, Name=Aman Singh}

示例2:

// Java program to demonstrate 
// compute(Key, BiFunction) method. 
  
import java.util.*; 
  
public class GFG { 
  
    // Main method 
    public static void main(String[] args) 
    { 
  
        // Create a Map and add some values 
        Map<String, Integer> map = new HashMap<>(); 
        map.put("Key1", 12); 
        map.put("Key2", 15); 
  
        // print map details 
        System.out.println("Map: " + map); 
  
        // remap the values 
        // using compute method 
        map.compute("Key1", (key, val) 
                                -> (val == null) 
                                       ? 1
                                       : val + 1); 
        map.compute("Key2", (key, val) 
                                -> (val == null) 
                                       ? 1
                                       : val + 5); 
  
        // print new mapping 
        System.out.println("New Map: " + map); 
    } 
}
輸出:
Map: {Key2=15, Key1=12}
New Map: {Key2=20, Key1=13}

示例3:顯示NullPointerException

// Java program to demonstrate Exception thrown by 
// compute(Key, BiFunction) method. 
  
import java.util.*; 
  
public class GFG { 
  
    // Main method 
    public static void main(String[] args) 
    { 
  
        // create a Map and add some values 
        Map<String, Integer> map = new HashMap<>(); 
        map.put("Key1", 12); 
        map.put("Key2", 15); 
  
        // print map details 
        System.out.println("Map: " + map); 
  
        try { 
  
            // remap the values using compute() method 
            // passing null value will throw exception 
            map.compute(null, (key, value) 
                                  -> value + 3); 
            System.out.println("New Map: " + map); 
        } 
        catch (NullPointerException e) { 
  
            System.out.println("Exception: " + e); 
        } 
    } 
}
輸出:
Map: {Key2=15, Key1=12}
Exception: java.lang.NullPointerException

參考:https://docs.oracle.com/javase/10/docs/api/java/util/HashMap.html#compute(K,java.util.function.BiFunction)



相關用法


注:本文由純淨天空篩選整理自AmanSingh2210大神的英文原創作品 HashMap compute() method in Java with Examples。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。