Le remplacement des clés et des valeurs dans une Carte élégante
Je sais déjà comment le faire de la manière difficile et il a obtenu de travailler en itérant sur les entrées et échange "manuellement". Mais je me demande si, comme beaucoup de tâches, celui-ci peut être résolu d'une façon plus élégante.
J'ai lu ce post, malheureusement, il ne dispose pas des solutions élégantes. Je n'ai aucune possibilité d'utiliser n'importe fantaisie Goyave BiMaps ou quoi que ce soit à l'extérieur de la jdk (projet de la pile est déjà défini).
Je peux supposer que ma carte est bijective, btw 🙂
L'ajout d'un supplément d'utilité bibliothèque, ce n'est pas vraiment changer le projet "pile" dans le sens que (dire) modification de l'INTERFACE utilisateur framework que vous utilisez serait. Je vous invite à reconsidérer votre opposition à l'utilisation de Goyave si tous possible.
Vous n'avez besoin que d'une seule boucle avec une seule ligne est simple et elegent. À mon humble avis. Java n'est pas un langage fonctionnel.
merci à vous tous, avec tous ceux qui se chevauchent et que les réponses concises on a vraiment du mal à choisir celui qui à accepter. J'imagine Mal aller avec Aaron Digulla pour la fourniture d'une enveloppe de solution de contournement.
et merci pour le montage, Emil
Vous n'avez besoin que d'une seule boucle avec une seule ligne est simple et elegent. À mon humble avis. Java n'est pas un langage fonctionnel.
merci à vous tous, avec tous ceux qui se chevauchent et que les réponses concises on a vraiment du mal à choisir celui qui à accepter. J'imagine Mal aller avec Aaron Digulla pour la fourniture d'une enveloppe de solution de contournement.
et merci pour le montage, Emil
OriginalL'auteur kostja | 2010-12-14
Vous devez vous connecter pour publier un commentaire.
La norme API /Java runtime n'offre pas un bi-directionnelle de la carte, de sorte que la seule solution est d'itérer sur toutes les entrées et les échanger manuellement.
Ce que vous pouvez faire est de créer une classe wrapper qui contient deux cartes, et qui fait un double
put()
en interne de sorte que vous rapidement deux points de vue sur les données.[EDIT] Aussi, grâce à l'open source, vous n'avez pas à inclure une bibliothèque tierce, vous pouvez simplement copier les classes dont vous avez besoin dans votre propre projet.
OriginalL'auteur Aaron Digulla
Ce serait la meilleure réponse après l'ajout de Flux avec Java 8
que faire si les valeurs de la carte originale, où, en plus d'une touche? vous perdriez la valeur lors de la permutation & obtenir une Exception
OriginalL'auteur Nikita Marshalkin
Si vous n'avez pas le choix d'utiliser une bibliothèque tierce, je ne considère pas le code suivant si laid (même si certains langages de script ne élégants, des moyens de le faire):
OriginalL'auteur Eyal Schneider
Les cartes ne sont pas comme les listes, ce qui peut être renversée par le remplacement de la tête à la queue.
Objets dans les cartes ont la position calculée, et à l'aide de la valeur de la clé et la clé comme valeur requiere de re-calculer le lieu de stockage, essentiellement la création d'une autre carte. Il n'y a pas de manière élégante.
Il y a, cependant, bidirectionnel cartes. Ceux qui peuvent répondre à vos besoins. J'avais reconsidérer l'aide de bibliothèques tierces.
OriginalL'auteur slezica
Il y a quelques travaux qui peuvent être simplifié à un certain point et pas plus. Cela peut être l'un d'entre eux!
Si vous voulez faire le travail à l'aide de Java api collections alors seulement la force brute est le chemin à parcourir - il sera rapide (sauf si la collection est énorme) et il sera évident morceau de code.
OriginalL'auteur Fortyrunner
Comme un soupçon de réponse
https://stackoverflow.com/a/42091477/8594421
Cela fonctionne uniquement si la carte n'est pas une HashMap et ne contiennent pas de valeurs en double.
déclenche une exception
si il y a des valeurs plus d'une fois.
La solution:
OriginalL'auteur User8461
Si vous aviez accès à apache commons-collections, vous pourriez avoir utilisé MapUtils.invertMap.
Remarque: Le comportement en cas de doublons n'est pas défini.
(Répondre à cela puisque c'est le premier résultat google pour "java inverser la carte").
OriginalL'auteur kebin