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

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

Java中的 HashMap replaceAll(BiFunction) 方法及示例

HashMap 类replaceAll(BiFunction)方法将每个值替换为对相应值应用给定函数(执行特定操作)的结果。这个过程以同样的方式继续,直到所有的条目都被处理完或者直到函数抛出一个异常。它重新抛出替换函数抛出的异常。

句法:

default void replaceAll(BiFunction function)

范围:

  • BiFunction:对每个条目的值进行操作的函数。

返回值:在原地替换计算值,该方法不返回任何内容

例外:

  • ClassCastException:抛出以指示替换类已尝试将对象强制转换为此映射不可接受的类型的子类。
    示例:当尝试将 Integer 转换为 String 时,String 不是 Integer 的子类,将抛出 ClassCastException。
  • ConcurrentModificationException:当对象在迭代时尝试同时修改或删除时发生。
    示例:不允许线程(程序中的独立执行路径)在其他线程迭代集合时修改集合。发生这种情况的原因是上述操作的结果变得未定义。
  • IllegalArgumentException (可选) 当替换值的某些属性被传递了非法或不适当的参数并因此阻止将其存储在此映射中时。
    示例:如果方法需要非空字符串作为参数并且输入字符串等于 null,则抛出 IllegalArgumentException。
  • NullPointerException (可选) 当给定函数指向 null 或 newValue 尚未初始化并因此引用 null 时,它会抛出 NullPointerException。
    示例:调用空对象的实例方法。
  • UnsupportedOperationException (可选) 抛出以指示此映射不支持请求的操作。
    示例:在 ArraysList 类中,如果我们使用添加或删除方法,则会抛出 UnsupportedOperationException。

下面的程序说明了 merge(Key, Value, BiFunctional) 方法:

方案一:

// Java program to demonstrate
// replaceAll(BiFunction) method.
  
import java.util.*;
  
public class GFG {
  
    // Main method
    public static void main(String[] args)
    {
  
        // create a HashMap having some entries
        HashMap
            map1 = new HashMap<>();
        map1.put("key1", 1);
        map1.put("key2", 2);
        map1.put("key3", 3);
        map1.put("key4", 4);
  
        // print map details
        System.out.println("HashMap1: "
                           + map1.toString());
  
        // replace oldValue with square of oldValue
        // using replaceAll method
        map1.replaceAll((key, oldValue)
                            -> oldValue * oldValue);
  
        // print new mapping
        System.out.println("New HashMap: "
                           + map1);
    }
}
输出:
HashMap1: {key1=1, key2=2, key3=3, key4=4}
New HashMap: {key1=1, key2=4, key3=9, key4=16}

方案二:

// Java program to demonstrate
// replaceAll(BiFunction) method.
  
import java.util.*;
  
public class GFG {
  
    // Main method
    public static void main(String[] args)
    {
  
        // create a HashMap having
        // record of the year of birth
        HashMap
            map1 = new HashMap<>();
        map1.put("Tushar", 2000);
        map1.put("Anushka", 2001);
        map1.put("Sanskriti", 2003);
        map1.put("Anuj", 2002);
  
        // print map details
        System.out.println("HashMap1: "
                           + map1.toString());
  
        // replace yearOfBirth with current age
        // using replaceAll method
        map1.replaceAll((key, yearOfBirth)
                            -> 2019 - yearOfBirth);
  
        // print new mapping
        System.out.println("New HashMap: "
                           + map1);
    }
}
输出:
HashMap1: {Sanskriti=2003, Anushka=2001, Tushar=2000, Anuj=2002}
New HashMap: {Sanskriti=16, Anushka=18, Tushar=19, Anuj=17}

参考: 函数 : Java Java )