Existe-t-il une raison de trier MultiMap en Java et comment le faire?Comment trier un MultiMap <k,v> en java?
Répondre
En supposant que vous parlez de org.apache.commons.collections.MultiMap
, alors vous ne pouvez pas; puisqu'il renvoie un Collection
et non un List
, il ne supporte pas le concept d'ordre.
Si vous parlez org.apache.commons.collections.MultiHashMap
, tout ce que vous devez faire est de parcourir les touches, de prendre le ArrayList
retourné et de le trier en utilisant Collections.sort()
. Cela suppose que vous utilisez that implementation though.
Rien ne vous empêche cependant d'implémenter votre propre MultiMap
assez facilement, qui prend en charge les listes de tri. Il peut être aussi facile que HashMap<K, Collection<V>>
, je ne suis pas familier avec le fonctionnement de MultiMaps.
En fait, je ne sais pas pourquoi vous voudriez trier une carte. Une carte est un dictionnaire et vous récupérez à partir de ce dictionnaire un (ou dans le cas des multimaps une collection de) valeur (s) qui vous intéresse.
Dans le cas d'un MultiMap vous voudrez peut-être trier le Collection résultant d'un get. Mais quel avantage avez-vous d'une carte triée puisqu'elle n'accélère rien pour trouver une valeur spécifique?
Si vous considérez une carte comme une collection de tuples, ce problème a du sens. Les cartes en Java permettent d'attribuer un index à chaque occurrence d'une collection. Pensez à Maps en tant que tables avec un PK non-syntaxique, par exemple. 1-> orange, 2-> banane Le problème est lorsque vous commencez à utiliser des cartes comme ** collections de tuples **. George-> Constanza, Jerry-> Seinfeld. Ensuite, vous devrez peut-être trier la carte, par exemple, Prénom ou nom (clé ou valeur) Si Java fourni tuples 'alla' Python, ce ne serait pas un problème – llappall
Je ne comprends pas le commentaire. Soit on itère sur la carte complète, soit on récupèrerait une valeur avec une clé. Dans les deux cas, aucun tri n'est nécessaire. Je pense que votre exemple en tant que collection de tuples est valide, mais je n'utiliserais pas de Multimap pour cela. De plus, j'utiliserais une autre structure de données pour votre exemple de tuple. – boutta
La solution la plus simple consiste à utiliser TreeMultimap de la goyave. Utilisez directement
TreeMultimap<...> sortedMap = TreeMultimap.create(notSortedMultiMap);
si vos clés et valeurs sont triables naturellement (mettre en œuvre Comparable), ou
TreeMultimap<...> sortedMap = TreeMultimap.create(keyComparator, valueComparator);
sortedMap.putAll(notSortedMultiMap);
si vous devez fournir des comparateurs personnalisés.
Si vous savez que vous en aurez besoin et que vous vous souciez peu de la vitesse de récupération, vous pouvez bien sûr utiliser TreeMap dès le début.
Ensuite, vous pouvez itérer sur TreeMap ou utiliser quelque chose comme valeurs() ou des entrées pour obtenir la collection triée.
- 1. Comment convertir un vecteur <pair <int,int>> en multimap <int,int> efficacement?
- 2. Trier tableau d'articles en utilisant OrderBy <>
- 3. problème avec std :: multimap
- 4. Comment trier un GridItemCollection
- 5. Trier la liste <DateTime> décroissant
- 6. J'ai besoin d'un multimap légèrement différent
- 7. Créer un multimap faible avec Google Collections
- 8. <br>? \ n? un saut de ligne en Java
- 9. Comment envoyer^K au shell
- 10. Comment trier un tableau dans Scala?
- 11. JavaScript - Comment trier un div
- 12. Comment trier les enregistrements dans un fichier texte en utilisant Java?
- 13. Matlab: K-means clustering
- 14. Comment puis-je trier la liste <T> en fonction des propriétés de T?
- 15. Comment compléter l'exercice K & R 2-4?
- 16. Comment trier un fichier XML en utilisant .NET?
- 17. Comment trier un treemap en fonction de ses valeurs?
- 18. Comment trier un tableau de cette façon en php
- 19. Python algorithme k-means
- 20. Comment trier en utilisant GridView et ObjectDataSource?
- 21. Apprendre J/K/APL
- 22. Commande Windows 'dir', trier par nom ET <something>
- 23. Comment trier une liste liée en SQL?
- 24. Comment trier naturellement/numériquement un DataView?
- 25. Comment trier un tableau de FileInfo []
- 26. C# Liste <> Trier par/Regrouper par/Enlever
- 27. Comment trier cette liste en Python?
- 28. Comment trier les données en valeurs alphanumériques
- 29. Comment trier en comptant avec postgresql?
- 30. Comment trier un System.Collections.Generic.List dans VB.Net?
Je propose que cette question soit rouverte – mdec
Je propose également qu'il soit reopend. –
Ce qui n'est pas réel à propos de "Comment trier un MultiMap dans java?"? Je reste avec mdec et Steve. +1 pour la réouverture! –
Burkhard