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)
相關用法
- Java HashMap computeIfAbsent()用法及代碼示例
- Java HashMap putIfAbsent(key, value)用法及代碼示例
- Java HashMap replace(key, value)用法及代碼示例
- Java ConcurrentHashMap compute()用法及代碼示例
- Java HashTable compute()用法及代碼示例
- Java HashMap getOrDefault(key, defaultValue)用法及代碼示例
- Java HashMap computeIfPresent(key, BiFunction)用法及代碼示例
- Java HashMap merge(key, value, BiFunction)用法及代碼示例
- Java HashMap replaceAll(BiFunction)用法及代碼示例
- Java HashMap forEach(BiConsumer)用法及代碼示例
- Java Properties compute(Key, BiFunction)用法及代碼示例
- Java HashMap replace(key, oldValue, newValue)用法及代碼示例
注:本文由純淨天空篩選整理自AmanSingh2210大神的英文原創作品 HashMap compute() method in Java with Examples。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。