J'ai un arraylist de chaîne names
qui contient des noms de personnes. Je veux trier l'arraylist par ordre alphabétique.
ArrayList<String> names = new ArrayList<String>();
names.add("seetha");
names.add("sudhin");
names.add("Swetha");
names.add("Neethu");
names.add("ananya");
names.add("Athira");
names.add("bala");
names.add("Tony");
names.add("Karthika");
names.add("Nithin");
names.add("Vinod");
names.add("jeena");
Collections.sort(names);
for(int i=0; i<names.size(); i++)
System.out.println(names.get(i));
J'ai essayé de trier la liste de la manière ci-dessus. Mais il affiche le tableau trié comme suit:
Athira
Karthika
..
..
ananya
bala
...
mais je ne veux pas le rendre sensible à la casse. Je veux le résultat comme:
ananya
Athira
bala
for (TYPE newvariable : ARRAYTYPE arrayname) { Log.i("YOURAPPTAG", newvariable); }
String.CASE_INSENSITIVE_ORDER
, vous verrez que A1 est supérieurless
à A10 simplement parce que la longueur est plus petite. Il n'y a pas de support "de tri naturel"La chose la plus simple à faire est:
la source
essayez ce code
la source
Sur la base des réponses mentionnées ci-dessus, j'ai réussi à comparer mes objets de classe personnalisés comme ceci:
la source
Vous devez utiliser un comparateur personnalisé qui utilisera
compareToIgnoreCase
, et non compareTo.la source
À partir de Java 8, vous pouvez utiliser
Stream
:Il obtient un flux à partir de cela
ArrayList
, puis il le trie (en ignorant le cas). Après cela, le flux est converti en un tableau qui est converti enArrayList
.Si vous imprimez le résultat en utilisant:
vous obtenez la sortie suivante:
la source
Malheureusement, toutes les réponses à ce jour ne prennent pas en compte ce qui
"a"
ne doit pas être considéré comme égal"A"
au tri.Dans l'approche 1, toutes les lettres minuscules sont considérées comme supérieures à toutes les lettres majuscules.
L'approche 2 aggrave les choses, car CASE_INSENSITIVE_ORDER considère
"a"
et est"A"
égal (le résultat de la comparaison est0
). Cela rend le tri non déterministe.L'approche 3 (en utilisant un java.text.Collator) est à mon humble avis le seul moyen de le faire correctement, car elle considère
"a"
et"A"
n'est pas égale, mais les met dans le bon ordre en fonction de la locale actuelle (ou de toute autre locale souhaitée).la source