Ce que je voudrais réaliser est de trier une collée d'objets par une valeur de chaîne. Cependant, dans une voie dépendante locale à l'aide d'un collateur. En raison des raisons de performance, je ne veux pas utiliser la méthode Comparer () Collateur (comme ci-dessous dans le code) plutôt que la classe CollationKey, car l'API Java déclare que l'utilisation d'un collationkey est beaucoup plus rapide.
Mais comment puis-je implémenter la méthode comparète () en utilisant la collationkey? Depuis que je l'ai compris, je dois complètement écrire toutes les méthodes de comparaison à mienne si je vais utiliser un collationkey. Donc, je ne pourrai même plus utiliser les méthodes Collections.sort () ... Je suis très reconnaissable pour un exemple facile à comprendre et une implémentation la plus efficace pour trier la collection d'objets de personne utilisant un collationkey. < / p>
merci! p>
3 Réponses :
CollationsKeys code>. Vous pouvez utiliser Treemap code> comme implémentation li>
- pour chaque élément E que vous souhaitez trier,
m.put (collator.getcollationkey (e. {getstringyouwanttosorton}), e); code> li>
ol>
itération sur m.values () code> devrait produire vos objets, triés par la chaîne que vous souhaitez utiliser CollationsKeys code>. P>.
Je crois que ce n'est pas efficace, mais cela devrait fonctionner. P>
La réponse d'Erickson conduit à une solution plus efficace.
Dans mon cas, la solution acceptée ne pouvait être mise en œuvre et celle-ci fonctionnait parfaitement.
Utilisez un comparateur au lieu de faire une personne comparable. Votre comparateur peut prendre 2 instances d'actions et les comparer en fonction de l'instance de collateur. puis appelez
Le problème stocke la collationkey dans le comparateur afin que ce ne soit pas calculé à plusieurs reprises ...
Ah, je vois le problème. Je n'ai pas utilisé de collateurs du tout. Je pensais que la question initiale était simplement adressée à réacquérir continuellement l'instance de collateur.
class Person implements Comparable<Person> { private static final Collator collator = Collator.getInstance(Locale.ITALY); private final String lastname; private final CollationKey key; Person(String lastname) { this.lastname = lastname; this.key = collator.getCollationKey(lastname); } public int compareTo(Person person) { return key.compareTo(person.key); } }
Bonjour Erickson, merci beaucoup pour la solution intelligente, je vais en mettre en œuvre comme ça, merci!