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

Author: Mrinal, 2016-01-25

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