Java HashMap compute()方法及示例
HashMap类的 compute(Key, BiFunction) 方法允许你更新HashMap中的一个值。compute()方法试图为指定的键和其当前的映射值计算一个映射(如果没有找到当前的映射,则为空)。该方法用于 自动更新 HashMap中 给定键的值 。
- 如果在compute中传递的重映射函数返回null,则该映射将从Map中删除(如果最初没有,则保持不存在)。
-
如果重映射函数抛出一个异常,那么该异常将被重新抛出,并且当前的映射将保持不变。
-
在计算过程中,重映射函数不应该能够修改这个映射。
compute()方法可以用来更新HashMap内部的一个现有值。 例如。
递增映射的一个int值:map.compute(key, (k, v) -> (v == null) ?1 : v+1)
- 如果compute()方法的重映射函数在计算过程中修改了这个映射,这个方法的默认实现对检测错误没有保证。
异常 :
本方法的非并发实现应该覆盖本方法,如果在计算过程中检测到映射的变化,则抛出ConcurrentModificationException。并发的实现应该覆盖此方法,如果在计算过程中检测到映射的变化,就抛出一个IllegalStateException,结果是计算永远不会完成。
该方法的默认实现对该方法的同步性或原子性不做任何保证。任何提供原子性保证的实现都必须覆盖此方法并记录其并发性属性。
语法
参数: 该方法接受两个参数。
- key :与该值相关的键。
- remappingFunction :计算该值的函数。
返回: 该方法返回 与指定键相关的新值,如果没有则返回空值。
异常: 这个方法会抛出。
- NullPointerException :如果键是空的,并且这个地图不支持空键,或者remappingFunction是空的。
- UnsupportedOperationException : 如果这个地图不支持put操作。
- ClassCastException : 如果键或值的类别阻止它被存储在这个地图中。
- IllegalArgumentException :如果键或值的某些属性使其不能被存储在这个地图中。
下面的程序说明了 compute(Key, BiFunction) 方法。
程序1 :
输出。
程序2
输出。
程序3: 显示NullPointerException
输出。
参考文献: https://docs.oracle.com/javase/10/docs/api/java/util/HashMap.html#compute(K, java.util.function.BiFunction)