Java中的HashMap merge(key, value, BiFunction)方法及示例
HashMap 类的merge(Key, Value, BiFunctional)方法用于使用给定的映射函数组合键的多个映射值。 Bucket实际上是数组的索引,该数组在HashMap实现中称为表。所以 table[0] 被称为 bucket0,table[1] 被称为 bucket1,依此类推。
- 如果键不存在或与 null 相关联,它只是将键与 Hashmap 中的相应值一起作为新条目输出。
- 但是,如果键已经包含某个值,那么重映射函数会将旧值和新值与给定键合并
- 如果 key 为 null,则始终映射到存储桶 0,因为NullPointerException不会为 null 键计算哈希
句法:
public V merge(K key, V value,
BiFunction remappingFunction)
参数:此方法接受三个参数:
- 键:这是我们具有特定值的键。如果两个键具有相同的值,则它们被合并。
- 值:这是存储在桶中的特定键对应的索引。
- BiFunction:具有两个参数的函数,用于从旧值和给定值计算新映射。
返回值:如果键不存在或与 null 关联,则此方法返回键及其值。否则,如果键已经包含任何值,它会使用映射技术将旧值与新值合并。
下面的程序说明了 merge(Key, Value, BiFunctional) 方法:
方案一:
// Java program to demonstrate
// computeIfAbsent(Key, Function) method.
import java.util.*;
public class GFG {
// Main method
public static void main(String[] args)
{
// create a HashMap and add some values
HashMap
map1 = new HashMap<>();
map1.put(1, "L");
map1.put(2, "M");
map1.put(3, "N");
HashMap
map2 = new HashMap<>();
map2.put(1, "B");
map2.put(2, "G");
map2.put(3, "R");
// print map details
System.out.println("HashMap1: "
+ map1.toString());
System.out.println("HashMap2: "
+ map2.toString());
// provide value for new key which is absent
// using computeIfAbsent method
map2.forEach(
(key, value)
-> map1.merge(
key,
value,
(v1, v2)
-> v1.equalsIgnoreCase(v2)
? v1
: v1 + ", " + v2));
// print new mapping
System.out.println("New HashMap: " + map1);
}
}
输出:
HashMap1: {1=L, 2=M, 3=N}
HashMap2: {1=B, 2=G, 3=R}
New HashMap: {1=L, B, 2=M, G, 3=N, R}
方案二:
// Java program to demonstrate
// computeIfAbsent(Key, Function) method.
import java.util.*;
public class GFG {
// Main method
public static void main(String[] args)
{
// create a HashMap and add some values
HashMap
map1 = new HashMap<>();
map1.put(1, "Ram");
map1.put(2, "Rohan");
map1.put(3, "Shivam");
HashMap
map2 = new HashMap<>();
map2.put(1, "Tushar");
map2.put(10, "Satya");
map2.put(12, "Sundar");
// print map details
System.out.println("HashMap1: "
+ map1.toString());
System.out.println("HashMap2: "
+ map2.toString());
// provide value for new key which is absent
// using computeIfAbsent method
map2.forEach(
(key, value)
-> map1.merge(
key,
value,
(v1, v2)
-> v1.equalsIgnoreCase(v2)
? v1
: v1 + ", " + v2));
// print new mapping
System.out.println("New HashMap: " + map1);
}
}
输出:
HashMap1: {1=Ram, 2=Rohan, 3=Shivam}
HashMap2: {1=Tushar, 10=Satya, 12=Sundar}
New HashMap: {1=Ram, Tushar, 2=Rohan, 3=Shivam, 10=Satya, 12=Sundar}
参考: https: Java/util/HashMap.html#merge-KV-java.util。函数.BiFunction-