Comment mapper des valeurs dans une carte en Java 8? [dupliquer]
Cette question a déjà une réponse ici:
Dites que j'ai un Map<String, Integer>
. Existe-t-il un moyen facile d'en 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 une doublure comme:
Map<String, String> mapped = originalMap.mapValues(v -> v.toString());
, Mais évidemment il n'y a pas de méthode mapValues
.
34
2 answers
Vous devez diffuser les entrées et les collecter dans une nouvelle carte:
Map<String, String> result = map.entrySet().stream()
.collect(toMap(Entry::getKey, e -> String.valueOf(e.getValue()));
78
Author: assylias, 2014-04-22 08:48:46
La façon La 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: -
- Obtenir un
Stream<Map.Entry<String, Integer>>
- Recueillir les résultats dans la carte résultante:
- Mapper les entrées à leur clé.
- Mapper les entrées aux nouvelles valeurs, en incorporant
String.valueOf
.
La raison pour laquelle vous ne pouvez pas le faire dans un one-liner, c'est parce que l'interface Map
ne l'offre pas, le plus proche que vous pouvez obtenir est map.replaceAll
, mais cette méthode dicte que le type doit rester la même.
18
Author: skiwi, 2014-04-22 08:27:51