Disons que j'ai un Map<String, Integer>
. Existe-t-il un moyen facile d’obtenir un Map<String, String>
?
Par facile, je veux dire pas comme ça:
Map<String, String> mapped = new HashMap<>();
for(String key : originalMap.keySet()) {
mapped.put(key, originalMap.get(key).toString());
}
Mais plutôt un liner comme:
Map<String, String> mapped = originalMap.mapValues(v -> v.toString());
Mais évidemment, il n'y a pas de méthode mapValues
.
Vous devez diffuser en flux les entrées et les rassembler dans une nouvelle carte:
Map<String, String> result = map.entrySet().stream()
.collect(Collectors.toMap(Entry::getKey, e -> String.valueOf(e.getValue()));
Le moyen le plus simple de le faire est:
Map<String, Integer> map = new HashMap<>();
Map<String, String> mapped = map.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey, entry -> String.valueOf(entry.getValue())));
Ce que vous faites ici, c'est:
Stream<Map.Entry<String, Integer>>
String.valueOf
.La raison pour laquelle vous ne pouvez pas le faire dans une ligne, c'est parce que l'interface Map
ne propose pas une telle solution, le plus proche que vous pouvez obtenir c'est map.replaceAll
, mais cette méthode dicte que le type reste inchangé.