Java中的 HashMap compute() 方法及示例
HashMap 类的compute(Key, BiFunction)方法允许您更新 HashMap 中的值。 compute() 方法尝试计算指定键及其当前映射值的映射(如果没有找到当前映射,则为 null)。此方法用于自动更新 HashMap 中给定键的值。
- 如果在 compute 中传递的重新映射函数返回 null,则映射将从 Map 中删除(如果最初不存在,则保持不存在)。
- 如果重新映射函数抛出异常,则重新抛出异常,并且当前映射保持不变。
- 在计算过程中,重映射函数应该不能修改这个映射。
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 并且此映射不支持 null 键,或者 remappingFunction 为 null。
- UnsupportedOperationException :如果此映射不支持 put 操作。
- ClassCastException :如果键或值的类阻止它存储在此映射中。
- IllegalArgumentException :如果键或值的某些属性阻止它存储在此映射中。
下面的程序说明了 compute(Key, BiFunction) 方法:
方案一:
// 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 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}
方案二:
// 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 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 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: Java Java )