Saltar al contenido

Java: ¿agregar otro valor de cadena a la clave HashMap existente sin sobrescribir?

Hola usuario de nuestra web, hemos encontrado la solución a tu interrogante, has scroll y la verás a continuación.

Solución:

¿Qué esperas lograr aquí?

A Map (los HashMap) en su caso es un “mapeo” directo de uno “key” a otro valor.

P.ej

"foo" -> 123
"bar" -> 321
"far" -> 12345
"boo" -> 54321

Esto significa que si intentaras:

myHashMap.get("foo");

devolvería el valor 123 (por supuesto, el tipo de valor que devuelve puede ser el que desee).

Por supuesto, esto también significa que cualquier cambio que realice en el valor de la keyanula el valor original que le asignó, al igual que cambiar el valor de una variable anulará el original asignado.

Decir:

myHashMap.put("foo", 42);

El antiguo valor de "foo" en el mapa sería reemplazado con 42. Entonces se convertiría en:

"foo" -> 42
"bar" -> 321
"far" -> 12345
"boo" -> 54321

Sin embargo, si necesita varios String objetos que se asignan desde un solo keypodría usar un objeto diferente que puede almacenar varios objetos, como una matriz o una lista (o incluso otra HashMap si querías.

Por ejemplo, si estuvieras usando ArrayListscuando está asignando un valor a la HashMap(digamos que se llama myHashMap), primero verificaría si el key se ha utilizado antes, si no lo ha hecho, entonces crea uno nuevo ArrayList con el valor que desea agregar, si lo tiene, simplemente agregue el valor a la lista.

(Asumir key y value tenga los valores que desee)

ArrayList list;
if(myHashMap.containsKey(key))
    // if the key has already been used,
    // we'll just grab the array list and add the value to it
    list = myHashMap.get(key);
    list.add(value);
 else 
    // if the key hasn't been used yet,
    // we'll create a new ArrayList object, add the value
    // and put it in the array list with the new key
    list = new ArrayList();
    list.add(value);
    myHashMap.put(key, list);

¡Puedes hacer así!

Map> map = new HashMap<>();
.
.
if(map.containsKey(key))
    map.get(key).add(value);
 else 
   List list = new ArrayList<>();
   list.add(value);
   map.put(key, list);

O puede hacer lo mismo con un código de línea en estilo Java 8.

map.computeIfAbsent(key, k ->new ArrayList<>()).add(value);

¿Le gustaría una concatenación de las dos cadenas?

map.put(key, val);
if (map.containsKey(key)) 
    map.put(key, map.get(key) + newVal);

¿O le gustaría una lista de todos los valores para eso? key?

HashMap> map = new HashMap>();
String key = "key";
String val = "val";
String newVal = "newVal";
List list = new ArrayList();
list.add(val);
map.put(key, list);
if (map.containsKey(key)) 
    map.get(key).add(newVal);

Ten en cuenta dar visibilidad a esta crónica si lograste el éxito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *