-
Inverser une Map
Bonjour,
J'ai une Map<K, V> et je cherche a en inverser le sens (les roles de Key et Value). Ou mieux, avoir les deux champs qui servent de clef... J'ai pas trouve ca dans les classes implementant Map et je sais pas trop ou chercher d'autre.
Merci d'avance !!!
-
Effectivement ça n'existe pas (et ne peut pas exister de manière standard): dans une classe, les clés sont uniques, alors que les valeurs ne le sont pas forcément.
Une inversion n'est donc pas "sûre", puisqu'elle pourrait écraser (et donc perdre) des données.
Si tu es assuré de l'unicité des valeurs de ta Map, tu peux développer toi même ta méthode d'inversion (par exemple en héritant de la classe HashMap ;) )
-
Ok je vais peut etre devoir faire ca, merci pour ta reponse.
-
Bonjour,
:fleche: pour inverser le sens, une solution est de créer une map Map<TypeValue,TypeKey>, tu fais une boucle qui parcours ta map et tu enregistres l'ancien clé dans value et l'ancienne value dans clé. A la fin tu liberes la mémoire de ton ancienne map si tu en as pas besoin.
Le problème est que tu n'as pas interet à avoir des valeurs qui etaient identiques dans ta premiere map car la Key d'une map est unique.
:fleche: pour avoir les deux champs qui servent de clef, une solution est de créer une classe interne qui contient tes 2 attributs et faire un constructeur avec les 2 parametres. Ensuite tu créés une map Map<ClasseInterne, TypeValue>, tu fais une boucle avec à l'interieur quelque chose du genre: map.put(new ClasseInterne(ancienneCle,ancienneValue), TaValue)
Bonne chance
-
Salut,
Sinon il y a les BidiMap dans les Jakarta Commons Collections...
a++