Java中HashMap replaceAll(BiFunction)方法及示例
Java中,HashMap类的 replaceAll(BiFunction) 方法是将给定函数(执行某个操作)应用于对应值并将每个值替换为其结果。该过程在所有条目都已处理或函数抛出异常时继续进行。它会重新抛出替换函数抛出的异常。
语法:
default void replaceAll(BiFunction<K, V> function)
参数:
- BiFunction: 对每个条目的值执行操作的函数。
返回值: 原地替换计算后的值,并且该方法不返回任何内容。
异常:
- ClassCastException: 表示替换类试图将对象转换为不符合此映射的类型的子类时引发。举个例子, 当试图将Integer转换为String时, 由于String不是Integer的子类, 将抛出ClassCastException。
- ConcurrentModificationException: 在以迭代的方式修改或删除对象时发生。
例如: 不允许在另一个线程迭代Collection时修改Collection。原因是会导致上述操作的结果变得不确定。 - IllegalArgumentException (可选) : 如果替换值的某个属性传递了非法或不适当的参数,则阻止该值被存储在此映射中并导致IllegalArgumentException。
示例: 如果一个方法需要一个非空字符串作为参数,而输入字符串等于null,则会引发IllegalArgumentException。 - NullPointerException (可选) : 当给定的函数指向null或newValue尚未初始化且因此指向null时,它会引发一个NullPointerException。
例如: 调用一个空对象的实例方法。 - UnsupportedOperationException (可选) : 表示该映射不支持所请求的操作,将抛出UnsupportedOperationException。
例如: 在ArraysList类中,如果使用add或remove方法,将抛出UnsupportedOperationException。
以下程序说明了merge(Key, Value, BiFunctional)方法:
程序 1:
// 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<String, Integer>
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());
// 使用replaceAll方法,将旧值替换为旧值的平方值。
map1.replaceAll((key, oldValue)
-> oldValue * oldValue);
// print new mapping
System.out.println("New HashMap: "
+map1);
}
}
HashMap1: {key1=1, key2=2, key3=3, key4=4}
新的 HashMap: {key1=1, key2=4, key3=9, key4=16}
程序2:
// Java程序演示了replaceAll(BiFunction)方法
import java.util.*;
public class GFG {
// main方法
public static void main(String[] args)
{
// 创建一个HashMap,记录出生年份
HashMap<String, Integer>
map1 = new HashMap<>();
map1.put("Tushar", 2000);
map1.put("Anushka", 2001);
map1.put("Sanskriti", 2003);
map1.put("Anuj", 2002);
// 打印映射详情
System.out.println("HashMap1: "
+ map1.toString());
// 使用replaceAll方法,将出生年份替换为当前年龄
map1.replaceAll((key, yearOfBirth)
-> 2019 - yearOfBirth);
// 打印新映射
System.out.println("新的 HashMap: "
+ map1);
}
}
HashMap1: {Sanskriti=2003, Anushka=2001, Tushar=2000, Anuj=2002}
新的 HashMap: {Sanskriti=16, Anushka=18, Tushar=19, Anuj=17}
参考: https://docs.oracle.com/javase/10/docs/api/java/util/Map.html#replaceAll(java.util.function.BiFunction)