📜  Java中的 HashMap compute() 方法及示例

📅  最后修改于: 2022-05-13 01:55:38.220000             🧑  作者: Mango

Java中的 HashMap compute() 方法及示例

HashMap 类compute(Key, BiFunction)方法允许您更新 HashMap 中的值。 compute() 方法尝试计算指定键及其当前映射值的映射(如果没有找到当前映射,则为 null)。此方法用于自动更新 HashMap 中给定键的值

  • 如果在 compute 中传递的重新映射函数返回 null,则映射将从 Map 中删除(如果最初不存在,则保持不存在)。
  • 如果重新映射函数抛出异常,则重新抛出异常,并且当前映射保持不变。
  • 在计算过程中,重映射函数应该不能修改这个映射。
    compute() 方法可用于更新 HashMap 中的现有值。
    例如,
  • 如果 compute() 方法的重映射函数在计算期间修改此映射,则此方法的默认实现不保证检测到错误。

例外:
如果在计算期间检测到映射发生变化,则此方法的非并发实现应覆盖此方法并抛出ConcurrentModificationException 。如果在计算期间检测到映射发生变化并且因此计算永远不会完成,则并发实现应该重写此方法抛出IllegalStateException

此方法的默认实现不保证此方法的同步或原子属性。任何提供原子性保证的实现都必须覆盖此方法并记录其并发属性。

句法:

default V 
       compute(K key,
             BiFunction 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 )