java.util.HashMap.merge() 方法用于合并一个键的多个映射值。如果指定的键尚未与值或 null 关联,则将其与给定的非 null 值关联。否则,用给定重映射函数的结果替换关联值,或者如果结果为空则删除。
如果函数返回 null,则映射将被删除。如果函数本身抛出(未经检查的)异常,则重新抛出异常,并且当前映射保持不变。
语法
public V merge(K key,
V value,
BiFunction<? super V,? super V,? extends V> remappingFunction)
这里,K和V是键的类型
参数
key | 指定容器所维护的key将关联结果值。 |
value | 指定要与关联的现有值合并的非空值与键关联,或者如果没有现有值或空值与键关联,则与键关联。 |
remappingFunction | 指定重新计算值(如果存在)的函数。 |
返回值
返回与指定的键,如果没有值与该键关联,则返回 null。
异常
不适用。
示例:
在示例中下面, java.util.HashMap.merge() 方法用于合并一个键的多个映射值。
import java.util.*;
public class MyClass {
public static void main(String[] args) {
//创建HashMap
HashMap<Integer, String> Map1 = new HashMap<Integer, String>();
HashMap<Integer, String> Map2 = new HashMap<Integer, String>();
//填充Map1
Map1.put(101, "John");
Map1.put(102, "Marry");
Map1.put(103, "Kim");
//填充Map2
Map2.put(101, "M");
Map2.put(102, "F");
Map2.put(103, "M");
//打印HashMap
System.out.println("Map1 contains: " + Map1);
System.out.println("Map2 contains: " + Map2);
//将两个HashMap合并到Map1中
Map2.forEach((k,v) ->
Map1.merge(k, v, (v1, v2) ->
(v1 == v2) ?
v1 : v1 + ", " + v2 )
);
//打印HashMap
System.out.println("Map1 contains: " + Map1);
}
}
上述代码的输出将是:
Map1 contains: {101=John, 102=Marry, 103=Kim}
Map2 contains: {101=M, 102=F, 103=M}
Map1 contains: {101=John, M, 102=Marry, F, 103=Kim, M}