Java.util.Hashtable 类

java.util.Hashtable.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.Hashtable.merge() 方法用于合并一个键的多个映射值。

import java.util.*;

public class MyClass {
  public static void main(String[] args) {
    //创建哈希表
    Hashtable<Integer, String> Htable1 = new Hashtable<Integer, String>();
    Hashtable<Integer, String> Htable2 = new Hashtable<Integer, String>();

    //填充Htable1
    Htable1.put(101, "John");
    Htable1.put(102, "Marry");
    Htable1.put(103, "Kim");

    //填充Htable2
    Htable2.put(101, "M");
    Htable2.put(102, "F");
    Htable2.put(103, "M");    

    //打印哈希表
    System.out.println("Htable1 contains: " + Htable1);  
    System.out.println("Htable2 contains: " + Htable2);   

    //将两个Hashtable合并到Htable1中
    Htable2.forEach((k,v) ->
      Htable1.merge(k, v, (v1, v2) -> 
        (v1 == v2) ? 
          v1 : v1 + ", " + v2 )   
    ); 

    //打印哈希表
    System.out.println("Htable1 contains: " + Htable1);  
  }
}

上述代码的输出将是:

Htable1 contains: {103=Kim, 102=Marry, 101=John}
Htable2 contains: {103=M, 102=F, 101=M}
Htable1 contains: {103=Kim, M, 102=Marry, F, 101=John, M}