Bonjour j'ai une map<String,List<String>> et je voudrais la convertir en map<String,String>
mais je voudrais inverser les clefs.
{ a: [ A, B, C, D], b: [Z], c: [X, Y]} devient : { A: a, B: a, C: a, D: a, Z: b, X: c, Y: c}.
j'ai trouvé comment faire pour inverser une map<String,String> en map<String,String> key => en value => key
mais je n'ai pas trouvé comment faire ça avec une liste de valeur.
du coup pour le moment j'utilise l'API stream pour parcourir la map avec un foreach dans le consumer je parcours la liste là aussi avec un foreach et avec un bon vieux newMap.add je crée ma map.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 original.entrySet() .stream() .forEach((entry) -> { entry.getValue().forEach((value) -> { nyMap.put(value, entry.getKey()); }); });
je pense qu'il doit être possible de faire ça avec un collect toMap
le pb c'est que je ne vois pas comment à la place du Map.Entry::getValue produire chaque valeur à la place de la liste.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Map<String, String> copy = original.entrySet() .stream() .collect(Collectors.toMap(Map.Entry::getValue,Map.Entry::getKey));
A+JYT
Partager