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()));