Mam arraylistę ciągów znaków, names
która zawiera nazwiska osób. Chcę posortować listę arraylistyczną w kolejności alfabetycznej.
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));
Próbowałem uporządkować listę w powyższy sposób. Ale wyświetla posortowaną tablicę jako:
Athira
Karthika
..
..
ananya
bala
...
ale nie chcę rozróżniać wielkości liter. Chcę, aby wynik był taki jak:
ananya
Athira
bala
for (TYPE newvariable : ARRAYTYPE arrayname) { Log.i("YOURAPPTAG", newvariable); }
String.CASE_INSENSITIVE_ORDER
, zobaczysz, że A1 jest warunkowaneless
niż A10 tylko dlatego, że długość jest mniejsza. Nie ma wsparcia dla "naturalnego sortowania" po wyjęciu z pudełka, możeszNajprościej jest:
źródło
wypróbuj ten kod
źródło
W oparciu o powyższe odpowiedzi udało mi się porównać moje niestandardowe obiekty klas w następujący sposób:
źródło
Musisz użyć niestandardowego komparatora, który użyje
compareToIgnoreCase
, a nie porównania.źródło
Począwszy od Java 8 możesz użyć
Stream
:Pobiera z tego strumień
ArrayList
, a następnie sortuje go (ignorując wielkość liter). Następnie strumień jest konwertowany na tablicę, która jest konwertowana na plikArrayList
.Jeśli drukujesz wynik za pomocą:
otrzymasz następujący wynik:
źródło
Niestety, wszystkie dotychczasowe odpowiedzi nie uwzględniają tego, że
"a"
nie można ich traktować jako równych,"A"
jeśli chodzi o sortowanie.W podejściu 1 wszelkie małe litery są uważane za większe niż jakiekolwiek duże litery.
Podejście 2 pogarsza sytuację, ponieważ CASE_INSENSITIVE_ORDER uwzględnia
"a"
i jest"A"
równe (wynik porównania to0
). To sprawia, że sortowanie jest niedeterministyczne.Podejście 3 (przy użyciu java.text.Collator) jest jedynym sposobem wykonania tego poprawnie przez IMHO, ponieważ bierze pod uwagę
"a"
i"A"
nie jest równe, ale umieszcza je we właściwej kolejności zgodnie z bieżącym (lub innym pożądanym) ustawieniem regionalnym.źródło