implementar - ¿Cómo asignar valores en un mapa en Java 8?
map string string java (2)
Esta pregunta ya tiene una respuesta aquí:
Digamos que tengo un Map<String, Integer>
. ¿Hay alguna manera fácil de obtener un Map<String, String>
de él?
Por fácil, me refiero a no me gusta esto:
Map<String, String> mapped = new HashMap<>();
for(String key : originalMap.keySet()) {
mapped.put(key, originalMap.get(key).toString());
}
Pero más bien un trazador de líneas como:
Map<String, String> mapped = originalMap.mapValues(v -> v.toString());
Pero obviamente no hay un método mapValues
.
La forma más fácil de hacerlo es:
Map<String, Integer> map = new HashMap<>();
Map<String, String> mapped = map.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, entry -> String.valueOf(entry.getValue())));
Lo que haces aquí, es:
- Obtenga un
Stream<Map.Entry<String, Integer>>
- Recoge los resultados en el mapa resultante:
- Asigna las entradas a su clave.
- Asigne las entradas a los nuevos valores, incorporando
String.valueOf
.
La razón por la que no puede hacerlo en una línea, es porque la interfaz de Map
no ofrece tal, lo más cercano que puede obtener es map.replaceAll
, pero ese método dicta que el tipo debe permanecer igual.
Necesita transmitir las entradas y recopilarlas en un nuevo mapa:
Map<String, String> result = map.entrySet().stream()
.collect(toMap(Entry::getKey, e -> String.valueOf(e.getValue()));