Ich habe eine String-Arrayliste, names
die Namen von Personen enthält. Ich möchte die Arrayliste in alphabetischer Reihenfolge sortieren.
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));
Ich habe versucht, die Liste oben zu sortieren. Das sortierte Array wird jedoch wie folgt angezeigt:
Athira
Karthika
..
..
ananya
bala
...
aber ich möchte es nicht zwischen Groß- und Kleinschreibung unterscheiden. Ich möchte das Ergebnis wie folgt:
ananya
Athira
bala
for (TYPE newvariable : ARRAYTYPE arrayname) { Log.i("YOURAPPTAG", newvariable); }
String.CASE_INSENSITIVE_ORDER
, werden Sie sehen, dass A1less
als A10 verurteilt ist, nur weil die Länge kleiner ist. Es gibt keine sofortAm einfachsten ist es:
quelle
Versuchen Sie diesen Code
quelle
Basierend auf den oben genannten Antworten konnte ich meine benutzerdefinierten Klassenobjekte wie folgt vergleichen:
quelle
Sie müssen einen benutzerdefinierten Komparator verwenden, der verwendet wird
compareToIgnoreCase
, nicht compareTo.quelle
Ab Java 8 können Sie Folgendes verwenden
Stream
:Daraus wird ein Stream abgerufen
ArrayList
, der dann sortiert wird (wobei der Fall ignoriert wird). Danach wird der Stream in ein Array konvertiert, das in ein konvertiert wirdArrayList
.Wenn Sie das Ergebnis drucken mit:
Sie erhalten folgende Ausgabe:
quelle
Leider berücksichtigen alle bisherigen Antworten nicht, dass
"a"
dies"A"
beim Sortieren nicht als gleich angesehen werden darf .In Ansatz 1 werden Kleinbuchstaben als größer angesehen als Großbuchstaben.
Ansatz 2 macht es noch schlimmer, da CASE_INSENSITIVE_ORDER berücksichtigt
"a"
und"A"
gleich ist (Vergleichsergebnis ist0
). Dies macht das Sortieren nicht deterministisch.Ansatz 3 (unter Verwendung eines java.text.Collator) ist meiner Meinung nach die einzige Möglichkeit, dies korrekt zu tun, da er berücksichtigt
"a"
und"A"
nicht gleich ist, sondern sie in die richtige Reihenfolge entsprechend dem aktuellen (oder einem anderen gewünschten) Gebietsschema bringt.quelle