Java.util.HashMap 类

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}