Comment utiliser les flux Java 8 pour échanger des clés dans cette carte de cartes? Ou au moins nettoyer ce gâchis un peu ...Changement de clés dans une carte de cartes
Map<Type1, Map<Type2, String>> to Map<Type2, Map<Type1, String>>
pour les boucles utilisant imbriquée (non testé):
Map<Type1, Map<Type2, String>> map ...
Map<Type2, Map<Type1, String>> map2 = new HashMap<>();
for (Type 1 type1 : map.keySet()) {
for(Entry<Type2, String> entry : map.get(type1)) {
if (map2.get(entry.key() == null) {
map2.push(entry.key(), new HashMap<Type1, String>();
}
map2.get(entry.key()).put(type1, entry.value();
}
}
Je pense Jusqu'à présent, vous devrez carte rabat dans toutes les combinaisons uniques de Type1, Type2 et String et stockent cet ensemble dans une sorte de collection intermédiaire.
Certainement mal:
map.entrySet().stream().flatMap(t -> <Type1, Type2,
String>).collect(Collectors.toMap(t -> t.Type2, Collectors.toMap(t ->
t.type1, t->t.String))
C'est sans aucun doute une meilleure solution! En fait, j'ai fini par utiliser un type intermédiaire, une liste d'une classe de conteneur, puis j'ai utilisé streams + flatmap pour l'obtenir dans le format désiré. Si vous avez l'impression de combattre la structure de données, il y a probablement une meilleure solution. –