Saya memiliki daftar larik string names
yang berisi nama orang. Saya ingin mengurutkan daftar larik dalam urutan abjad.
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));
Saya mencoba mengurutkan daftar dengan cara di atas. Tapi itu menampilkan array yang diurutkan sebagai:
Athira
Karthika
..
..
ananya
bala
...
tapi saya tidak ingin membuatnya peka huruf besar / kecil. Saya ingin hasilnya sebagai:
ananya
Athira
bala
for (TYPE newvariable : ARRAYTYPE arrayname) { Log.i("YOURAPPTAG", newvariable); }
String.CASE_INSENSITIVE_ORDER
, maka Anda akan melihat bahwa A1 condiredless
daripada A10 hanya karena panjangnya lebih kecil. Tidak ada dukungan "alami" di luar kotak, Anda mungkin ingin melihat stackoverflow.com/questions/1262239/…Hal yang paling sederhana untuk dilakukan adalah:
sumber
coba kode ini
sumber
Berdasarkan jawaban yang disebutkan di atas, saya berhasil membandingkan Objek Kelas kustom saya seperti ini:
sumber
Anda perlu menggunakan komparator khusus yang akan digunakan
compareToIgnoreCase
, bukan bandingkanTo.sumber
Mulai dari Java 8 Anda dapat menggunakan
Stream
:Ia mendapat aliran dari itu
ArrayList
, lalu menyortirnya (mengabaikan kasus). Setelah itu, aliran diubah menjadi array yang diubah menjadi fileArrayList
.Jika Anda mencetak hasilnya menggunakan:
Anda mendapatkan output berikut:
sumber
Sayangnya, semua jawaban sejauh ini tidak memperhitungkan yang
"a"
tidak boleh dianggap sama"A"
ketika harus menyortir.Dalam pendekatan 1, setiap huruf kecil dianggap lebih besar daripada huruf besar mana pun.
Pendekatan 2 membuatnya lebih buruk, karena CASE_INSENSITIVE_ORDER menganggap
"a"
dan"A"
sama (hasil perbandingannya adalah0
). Ini membuat penyortiran menjadi non-deterministik.Pendekatan 3 (menggunakan java.text.Collator) adalah IMHO satu-satunya cara untuk melakukannya dengan benar, karena ia menganggap
"a"
dan"A"
tidak sama, tetapi menempatkannya dalam urutan yang benar sesuai dengan Lokal saat ini (atau yang diinginkan lainnya).sumber