Sejak Date
diterapkan Comparable
, ia memiliki compareTo
metode seperti String
halnya.
Jadi kebiasaan Anda Comparator
dapat terlihat seperti ini:
public class CustomComparator implements Comparator<MyObject> {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
}
The compare()
Metode harus mengembalikan int
, sehingga Anda tidak bisa langsung mengembalikan boolean
seperti Anda berencana untuk tetap.
Kode sortir Anda hampir sama dengan yang Anda tulis:
Collections.sort(Database.arrayList, new CustomComparator());
Cara yang sedikit lebih pendek untuk menulis semua ini, jika Anda tidak perlu menggunakan kembali komparator Anda, adalah menuliskannya sebagai kelas anonim sebaris:
Collections.sort(Database.arrayList, new Comparator<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
});
Anda sekarang dapat menulis contoh terakhir dalam bentuk yang lebih pendek dengan menggunakan ekspresi lambda untuk Comparator
:
Collections.sort(Database.arrayList,
(o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
Dan List
memiliki sort(Comparator)
metode, sehingga Anda dapat mempersingkat ini lebih jauh:
Database.arrayList.sort((o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
Ini adalah idiom umum sehingga ada metode bawaan untuk menghasilkan a Comparator
untuk kelas dengan Comparable
kunci:
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
Semua ini adalah bentuk yang setara.