web-dev-qa-db-fra.com

Trier la liste des chaînes avec localisation

Je veux trier ci-dessous la liste des chaînes selon les paramètres régionaux de l'utilisateur

List<String> words = Arrays.asList(
      "Äbc", "äbc", "Àbc", "àbc", "Abc", "abc", "ABC"
    );

Pour différents utilisateurs, la sortie de tri des paramètres régionaux doit être différente selon les paramètres régionaux.

Comment trier la liste ci-dessus selon les paramètres régionaux de l'utilisateur?

J'ai essayé

Collections.sort(words , String.CASE_INSENSITIVE_ORDER);

Mais cela ne fonctionne pas pour la localisation, alors comment passer le paramètre local à Collections.sort() ou existe-t-il un autre moyen efficace?

30
Rahul Agrawal

Vous pouvez utiliser un tri avec un comparateur personnalisé. Voir interface Collator

Collator coll = Collator.getInstance(locale);
coll.setStrength(Collator.PRIMARY);
Collections.sort(words, coll);

Le collateur est un comparateur et peut être transmis directement à la méthode Collections.sort(...).

50
John Dvorak

Je pense que c'est ce que vous devriez utiliser - Collator

La classe Collator effectue une comparaison de chaînes sensible aux paramètres régionaux. Vous utilisez cette classe pour créer des routines de recherche et de tri pour le texte en langage naturel.

Faites quelque chose comme suit dans votre comparateur -

public int compare(String arg1, Sting arg2) {
    Collator usCollator = Collator.getInstance(Locale.US); //Your locale here
    usCollator.setStrength(Collator.PRIMARY);
    return usCollator.compare(arg1, arg2);
}

Et passez une instance du comparateur le Collections.sort méthode.

Mise à jour

Comme @Jan Dvorak l'a dit, il s'agit en fait d'un comparateur, vous pouvez donc simplement créer son intance avec les paramètres régionaux souhaités, définir la force et lui transmettre la méthode de tri:

Collactor usCollator = Collator.getInstance(Locale.US); //Your locale here
usCollator.setStrength(Collator.PRIMARY); //desired strength
Collections.sort(yourList, usCollator);
24
Bhesh Gurung
List<MODEL> ulke = new ArrayList<MODEL>();

    Collections.sort(ulke, new Comparator<MODEL>() {
        Collator collator = Collator.getInstance(new Locale("tr-TR"));
        @Override
        public int compare(MODEL o1, MODEL o2) {
            return collator.compare(o1.getULKEAD(), o2.getULKEAD());
        }
    });
2
Mehmet Onar