如果指定的鍵已經不存在,Java HashMap merge() 方法將指定的鍵/值映射插入到哈希圖中。
如果指定的鍵已經與一個值相關聯,則該方法將舊值替換為指定函數的結果。
用法:
hashmap.merge(key, value, remappingFunction)
這裏,hashmap
是HashMap
類的對象。
參數:
merge()
方法采用 3 個參數:
- key- 指定的鍵
value
是要關聯的 - value- 關聯的值
key
, 如果key
已經與任何值相關聯 - remappingFunction- 關聯的結果
key
如果key
已經與一個值相關聯
返回:
- 返回新價值與
key
- 如果沒有與
key
關聯的值,則返回null
注意: 如果remappingFunction
結果null
,然後是指定的映射鑰匙已移除。
示例 1:HashMap merge() 插入新條目
import java.util.HashMap;
class Main {
public static void main(String[] args) {
// create an HashMap
HashMap<String, Integer> 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}
在上麵的示例中,我們創建了一個名為 prices
的 hashmap。注意表達式,
prices.merge("Shirt", 100, (oldValue, newValue) -> oldValue + newValue)
在這裏,我們使用了 lambda 表達式 (oldValue, newValue) -> oldValue + newValue)
作為重映射函數。要了解有關 lambda 表達式的更多信息,請訪問 Java Lambda Expressions 。
由於 Shirt
中不存在鍵 prices
,因此 merge()
方法插入映射 Shirt=100
。並且,重新映射函數的結果被忽略。
示例 2:HashMap merge() 插入具有重複鍵的條目
import java.util.HashMap;
class Main {
public static void main(String[] args) {
// create an HashMap
HashMap<String, String> 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},
在上麵的示例中,我們創建了一個名為 countries
的 hashmap。注意表達式,
countries.merge("Washington", "USA", (oldValue, newValue) -> oldValue + "/" + newValue)
在這裏,我們使用了 lambda 表達式 (oldValue, newValue) -> oldValue + "/" + newValue)
作為重映射函數。
由於 Washington
鍵已存在於 countries
中,因此舊值將替換為重新映射函數返回的值。因此,Washington
的映射包括值 America/USA
。
示例 3:HashMap merge() 合並兩個 HashMap
import java.util.HashMap;
class Main {
public static void main(String[] args) {
// create an HashMap
HashMap<String, Integer> 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<String, Integer> 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() 方法訪問 hashmap prices2
的每個條目並將其合並到 hashmap prices1
。我們使用了兩個 lambda 表達式:
- (鍵,值)-> price.merge(...)- 它訪問每個條目
prices1
並將其傳遞給merge()
方法。 - (舊值,新值)-> {...}- 這是一個重新映射函數。它比較兩個值並返回較小的值。
由於鍵 Shoes
存在於兩個哈希圖中,因此 Shoes
的值被重新映射函數的結果替換。
Java HashMap merge() 對比。全部放
我們還可以使用putAll()
方法來合並兩個哈希圖。但是,如果兩個哈希圖中都存在一個鍵,則舊值將被新值替換。
與 merge()
不同,putAll()
方法不提供重新映射函數。因此,我們無法決定為重複鍵存儲什麽值。
要了解有關putAll()
方法的更多信息,請訪問Java HashMap putAll()。
相關用法
- Java HashMap merge(key, value, BiFunction)用法及代碼示例
- Java HashMap putIfAbsent()用法及代碼示例
- Java HashMap size()用法及代碼示例
- Java HashMap isEmpty()用法及代碼示例
- Java HashMap getOrDefault()用法及代碼示例
- Java HashMap containsValue()用法及代碼示例
- Java HashMap values()用法及代碼示例
- Java HashMap compute()用法及代碼示例
- Java HashMap forEach()用法及代碼示例
- Java HashMap put()用法及代碼示例
- Java HashMap putAll()用法及代碼示例
- Java HashMap computeIfPresent()用法及代碼示例
- Java HashMap computeIfPresent(key, BiFunction)用法及代碼示例
- Java HashMap containsKey()用法及代碼示例
- Java HashMap clear()用法及代碼示例
- Java HashMap putIfAbsent(key, value)用法及代碼示例
- Java HashMap replace(key, value)用法及代碼示例
- Java HashMap replace()用法及代碼示例
- Java HashMap replaceAll(BiFunction)用法及代碼示例
- Java HashMap keySet()用法及代碼示例
注:本文由純淨天空篩選整理自 Java HashMap merge()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。