English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Se a chave especificada não existir, o método merge() do Java HashMap inserirá a chave especificada/O mapeamento de valor é inserido no mapeamento hash.
Mas, se a chave especificada já estiver associada a um valor, o método substituirá o valor antigo pelo resultado da função especificada.
A sintaxe do método merge() é:
hashmap.merge(key, value, remappingFunction)
O método merge() do HashMap usa3Parâmetros:
key - Para especificar o valor associado à chave
value - Se a chave já estiver associada a qualquer valor, é necessário o valor associado à chave
remappingFunction - Se a chave já estiver associada a um valor, o resultado será associado à chave.
Retorna o novo valor associado à chave (key)
Se não houver valor associado à chave (key), retornará null
AtençãoSe o resultado da função de remapeamento for null, a mapeamento do chave especificada será removido.
import java.util.HashMap; class Main { public static void main(String[] args) { //cria HashMap HashMap<String, Integer> prices = new HashMap<>(); //insere itens no 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) -> old value + newValue); System.out.println("Preço da camisa: ", + returnedValue); //Imprimir o HashMap atualizado System.out.println("HashMap atualizado: ") + prices); } }
Resultados de saída
HashMap: {Pant=150, Sacola=300, Calçados=200} Preço da camisa: 100 HashMap atualizado: {Pant=150, Shirt=100, Sacola=300, Calçados=200}
No exemplo acima, criamos um mapeamento hash chamado prices. Observe a expressão
prices.merge("Shirt", 100, (oldValue, newValue) -> old value + newValue)
Aqui, usamos a expressão lambda (oldValue, newValue) -> oldValue + newValue) como função remappingFunction. Para obter mais informações sobre expressões lambda, acesseExpressões Lambda Java.
Como a chave Shirt não existe no mapeamento prices, o método merge() atribuirá Shirt=100 inserir no mapeamento. E o resultado da função remappingFunction será ignorado.
import java.util.HashMap; class Main { public static void main(String[] args) { // cria HashMap HashMap<String, String> countries = new HashMap<>(); // insere itens no HashMap countries.put("Washington", "América"); countries.put("Canberra", "Austrália"); countries.put("Madrid", "Espanha"); System.out.println("HashMap: ") + countries); // Mapeamento de combinação da chave Washington String returnedValue = countries.merge("Washington", "USA", (oldValue, newValue) -> old value + "/" + newValue); System.out.println("Washington: ") + returnedValue); // Imprimir o HashMap atualizado System.out.println("HashMap atualizado: ") + countries); } }
Resultados de saída
HashMap: {Madrid=Espanha, Canberra=Austrália, Washington=América} Washington: América/USA HashMap atualizado: {Madrid=Espanha, Canberra=Austrália, Washington=América/USA},
No exemplo acima, criamos um mapeamento hash chamado countries. Observe a expressão
countries.merge("Washington", "USA", (oldValue, newValue) -> old value + "/" + newValue)
Aqui, usamos a expressão lambda (oldValue, newValue) -> oldValue + "/" + como função de remapeamento.
Como a chave Washington já existe no countries, o valor antigo será substituído pelo valor retornado pela função de remapeamento. Portanto, o mapeamento de Washington inclui o valor América/EUA。
import java.util.HashMap; class Main { public static void main(String[] args) { //cria HashMap HashMap<String, Integer> prices1 = new HashMap<>(); //insere itens no HashMap prices1.put("Pant", 230); prices1.put("Shoes", 350); System.out.println("HashMap 1: " + prices1); //cria outro hash map HashMap<String, Integer> prices2 = new HashMap<>(); //insere itens no HashMap prices2.put("Shirt", 150); prices2.put("Shoes", 320); System.out.println("HashMap 2: " + prices2); // forEach() acessa o prices2de cada entrada // merge() adiciona cada entrada do prices2insere no prices1 prices2.forEach((key, value) -> prices1.merge(key, value, (oldValue, newValue) -> { //retorna o valor menor if (oldValue < newValue) { return oldValue; } else { return newValue; } }); System.out.println("HashMap: ", + prices1); } }
Resultados de saída
HashMap 1: {Pant=230, Shoes=350} HashMap 2: {Shirt=150, Shoes=320} HashMap: {Pant=230, Shirt=150, Shoes=320}
No exemplo acima, criamos dois hash maps chamados prices1e prices2do mapeamento de hash. Observe o código,
prices2.forEach((key, value) -> prices1.merge(key, value, (oldValue, newValue) -> { if (oldValue < newValue) { return oldValue; } else { return newValue; } });
Aqui,HashMap.forEach()método acessa o hash map prices2de cada entrada, e a adicionamos ao hash map prices1中。 Nós usamos duas expressões lambda:
(key, value) -> prices.merge(...) - Ele acessa prices1de cada entrada, e passa para o método merge().
(oldValue, newValue) -> {...} - Esta é uma função de mapeamento de novo (remappingFunction). Ela compara dois valores e retorna o menor.
Como a chave Shoes existe em ambos os mapeamentos de hash, o valor de Shoes é substituído pelo resultado da função de mapeamento de novo (remappingFunction).
Também podemos usar o método putAll() para combinar dois mapeamentos de hash. No entanto, se ambos os mapeamentos de hash contiverem a mesma chave, o valor antigo será substituído pelo novo.
Diferente de merge(), o método putAll() não oferece funcionalidade de mapeamento de novo. Portanto, não podemos determinar o valor a ser armazenado para a chave repetida.
Para obter mais informações sobre o método putAll(), acesseHashMap putAll() Java.