如果指定的键已经与一个值相关联,则该方法将旧的值替换为指定函数的结果。
merge()
方法的语法为:
hashmap.merge(key, value, remappingFunction)
在这里, hashmap是HashMap
类的对象。
merge()参数
merge()
方法采用3个参数:
- key-与指定值关联的键
- value-要与key关联的值(如果key已经与任何值关联)
- remappingFunction-与键关联的结果(如果键已经与值关联)
merge()返回值
- 返回与键关联的新值
- 如果没有与键关联的
null
则返回null
注意 :如果remappingFunction结果为null
,则将删除指定键的映射。
示例1:HashMap merge()插入新条目
import java.util.HashMap;
class Main {
public static void main(String[] args) {
// create an HashMap
HashMap prices = new HashMap<>();
// insert entries to the HashMap
prices.put("Shoes", 200);
prices.put("Bag", 300);
prices.put("Pant", 150);
System.out.println("HashMap: " + prices);
int returnedValue = prices.merge("Shirt", 100, (oldValue, newValue) -> oldValue + newValue);
System.out.println("Price of Shirt: " + returnedValue);
// print updated HashMap
System.out.println("Updated HashMap: " + prices);
}
}
输出
HashMap: {Pant=150, Bag=300, Shoes=200}
Price of Shirt: 100
Updated HashMap: {Pant=150, Shirt=100, Bag=300, Shoes=200}
在上面的示例中,我们创建了一个名为price的哈希表。注意表达式
prices.merge("Shirt", 100, (oldValue, newValue) -> oldValue + newValue)
在这里,我们使用了lambda表达式(oldValue, newValue) -> oldValue + newValue)
作为重新映射函数。要了解有关lambda表达式的更多信息,请访问Java Lambda Expressions。
由于密钥Shirt不在价格中 ,因此merge()
方法将插入映射Shirt=100
。并且,重新映射函数的结果将被忽略。
示例2:HashMap merge()插入具有重复键的条目
import java.util.HashMap;
class Main {
public static void main(String[] args) {
// create an HashMap
HashMap countries = new HashMap<>();
// insert entries to the HashMap
countries.put("Washington", "America");
countries.put("Canberra", "Australia");
countries.put("Madrid", "Spain");
System.out.println("HashMap: " + countries);
// merge mapping for key Washington
String returnedValue = countries.merge("Washington", "USA", (oldValue, newValue) -> oldValue + "/" + newValue);
System.out.println("Washington: " + returnedValue);
// print updated HashMap
System.out.println("Updated HashMap: " + countries);
}
}
输出
HashMap: {Madrid=Spain, Canberra=Australia, Washington=America}
Washington: America/USA
Updated HashMap: {Madrid=Spain, Canberra=Australia, Washington=America/USA},
在上面的例子中,我们创建了一个名为HashMap的国家 。注意表达式
countries.merge("Washington", "USA", (oldValue, newValue) -> oldValue + "/" + newValue)
在这里,我们使用了lambda表达式(oldValue, newValue) -> oldValue + "/" + newValue)
作为重新映射函数。
由于关键华盛顿已经存在于各个国家中 ,因此旧值被重映射函数返回的值所代替。因此, 华盛顿的映射包括价值America / USA 。
示例3:HashMap merge()合并两个HashMap
import java.util.HashMap;
class Main {
public static void main(String[] args) {
// create an HashMap
HashMap prices1 = new HashMap<>();
// insert entries to the HashMap
prices1.put("Pant", 230);
prices1.put("Shoes", 350);
System.out.println("HashMap 1: " + prices1);
// create another hashmap
HashMap prices2 = new HashMap<>();
//insert entries to the HashMap
prices2.put("Shirt", 150);
prices2.put("Shoes", 320);
System.out.println("HashMap 2: " + prices2);
// forEach() access each entries of prices2
// merge() inserts each entry from prices2 to prices1
prices2.forEach((key, value) -> prices1.merge(key, value, (oldValue, newValue) -> {
// return the smaller value
if (oldValue < newValue) {
return oldValue;
}
else {
return newValue;
}
}));
System.out.println("Merged HashMap: " + prices1);
}
}
输出
HashMap 1: {Pant=230, Shoes=350}
HashMap 2: {Shirt=150, Shoes=320}
Merged HashMap: {Pant=230, Shirt=150, Shoes=320}
在上面的示例中,我们创建了两个名为prices1和prices2的哈希图 。注意代码,
prices2.forEach((key, value) -> prices1.merge(key, value, (oldValue, newValue) -> {
if (oldValue < newValue) {
return oldValue;
}
else {
return newValue;
}
}));
在这里,HashMap forEach()方法访问哈希表price2的每个条目,并将其合并到哈希表price1中 。我们使用了两个lambda表达式:
- (键,值)-> prices.merge(…) -它访问prices1的每个条目,并将其传递给
merge()
方法。 - (oldValue,newValue)-> {…} -这是一个重新映射函数。它比较两个值并返回较小的值。
由于密钥“ 鞋子”同时存在于两个哈希图中,因此“ 鞋子”的值将被重新映射函数的结果替换。
Java HashMap merge()与。 putAll
我们还可以使用putAll()
方法合并两个哈希图。但是,如果两个哈希图中都存在键,则将旧值替换为新值。
与merge()
不同, putAll()
方法不提供重新映射函数。因此,我们无法决定要为重复键存储什么值。
要了解有关putAll()
方法的更多信息,请访问Java HashMap putAll()。