Eu tenho uma string arraylist names
que contém nomes de pessoas. Eu quero classificar a lista de matrizes em ordem alfabética.
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));
Eu tentei classificar a lista da maneira acima. Mas está exibindo a matriz classificada como:
Athira
Karthika
..
..
ananya
bala
...
mas não quero torná-lo sensível a maiúsculas. Eu quero o resultado como:
ananya
Athira
bala
for (TYPE newvariable : ARRAYTYPE arrayname) { Log.i("YOURAPPTAG", newvariable); }
String.CASE_INSENSITIVE_ORDER
, verá que A1 é compatível comless
A10 apenas porque o comprimento é menor. Não existe um "tipo natural" apoiar fora da caixa, você pode querer dar uma olhada em stackoverflow.com/questions/1262239/...A coisa mais simples a fazer é:
fonte
tente este código
fonte
Com base nas respostas acima mencionadas, consegui comparar meus Objetos de Classe personalizados como este:
fonte
Você precisa usar o comparador personalizado que usará
compareToIgnoreCase
, não compareTo.fonte
A partir do Java 8, você pode usar
Stream
:Ele obtém um fluxo a partir disso
ArrayList
e o classifica (ignorando o caso). Depois disso, o fluxo é convertido em uma matriz que é convertida em umArrayList
.Se você imprimir o resultado usando:
você obtém a seguinte saída:
fonte
Infelizmente, todas as respostas até o momento não levam em consideração que
"a"
não devam ser consideradas iguais"A"
quando se trata de classificação.Na abordagem 1, qualquer letra minúscula é considerada maior que qualquer letra maiúscula.
Abordagem 2 torna pior, já que CASE_INSENSITIVE_ORDER considera
"a"
e"A"
igual (resultado comparation é0
). Isso torna a classificação não determinística.A abordagem 3 (usando um java.text.Collator) é IMHO a única maneira de fazê-lo corretamente, uma vez que considera
"a"
e"A"
não é igual, mas os coloca na ordem correta de acordo com o local (atual ou qualquer outro desejado).fonte