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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。