Java 8 convertir la carte > en carte > avec [dupliquer]
Cette question a déjà une réponse ici:
J'ai une carte est une carte vers une liste de valeurs mais je dois l'inverser pour que
Map<Integer, List<String>>
Devient
Map<String, List<Integer>>
Par exemple {j'ai[5]}
1 -> { A, B, C }
2 -> { B }
3 -> { A, C }
Et je veux voir
A -> { 1, 3 }
B -> { 1, 2 }
C -> { 1, 3 }
Existe - t-il un moyen plus simple de le faire en Java 8 ceci que d'avoir à parcourir les entrées de la carte et à créer une entrée définie si elle n'existe pas, et à ajouter à la liste, etc.? Je continue à penser que c'est vraiment évident mais je ne peux pas le résoudre.
Merci d'avance
2
1 answers
Non testé, mais vous pourriez faire quelque chose comme ceci:
mapIntToStrings.entrySet().stream()
.flatMap(entryIntToStrings -> entryIntToStrings.getValue().stream()
.map(str -> new AbstractMap.SimpleEntry<>(entryIntToStrings.getKey(), str)))
.collect(groupingBy(Map.Entry::getValue, mapping(Map.Entry::getKey, toList())))
8
Author: Louis Wasserman, 2016-01-25 18:42:48