当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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