Tengo una lista de cadenas names
que contiene nombres de personas. Quiero ordenar la lista de arrays en orden alfabético.
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));
Traté de ordenar la lista de la manera anterior. Pero muestra la matriz ordenada como:
Athira
Karthika
..
..
ananya
bala
...
pero no quiero que sea sensible a mayúsculas y minúsculas. Quiero el resultado como:
ananya
Athira
bala
for (TYPE newvariable : ARRAYTYPE arrayname) { Log.i("YOURAPPTAG", newvariable); }
String.CASE_INSENSITIVE_ORDER
, verá que A1 está condicionadoless
que A10 solo porque la longitud es menor. No hay soporte de "tipo natural" fuera de la caja, es posible que desee echar un vistazo a stackoverflow.com/questions/1262239/…Lo más simple es:
fuente
prueba este código
fuente
Basado en las respuestas mencionadas anteriormente, logré comparar mis objetos de clase personalizados de esta manera:
fuente
Debe usar un comparador personalizado que usará
compareToIgnoreCase
, no compareTo.fuente
A partir de Java 8 puede usar
Stream
:Obtiene una secuencia de eso
ArrayList
, luego lo ordena (ignorando el caso). Después de eso, la secuencia se convierte en una matriz que se convierte en unArrayList
.Si imprime el resultado usando:
obtienes el siguiente resultado:
fuente
Desafortunadamente, todas las respuestas hasta ahora no tienen en cuenta que
"a"
no deben considerarse iguales a"A"
la hora de ordenar.En el enfoque 1, cualquier letra minúscula se considera mayor que cualquier letra mayúscula.
El enfoque 2 lo empeora, ya que CASE_INSENSITIVE_ORDER considera
"a"
e"A"
igual (el resultado de la comparación es0
). Esto hace que la ordenación no sea determinista.El Enfoque 3 (usando un java.text.Collator) es, en mi humilde opinión, la única forma de hacerlo correctamente, ya que lo considera
"a"
y"A"
no es igual, pero los coloca en el orden correcto de acuerdo con la configuración regional actual (o cualquier otra deseada).fuente