Kể từ khi Datethực hiện Comparable, nó có một compareTophương pháp giống như Stringlàm.
Vì vậy, tùy chỉnh của bạn Comparatorcó thể trông như thế này:
public class CustomComparator implements Comparator<MyObject> {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
}
Các compare()phương pháp phải trả lại int, vì vậy bạn có thể không trực tiếp trả về một booleangiống như bạn đang lên kế hoạch để anyway.
Mã sắp xếp của bạn sẽ giống như bạn đã viết:
Collections.sort(Database.arrayList, new CustomComparator());
Một cách ngắn hơn một chút để viết tất cả những điều này, nếu bạn không cần sử dụng lại bộ so sánh của mình, là viết nó dưới dạng một lớp ẩn danh nội tuyến:
Collections.sort(Database.arrayList, new Comparator<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
});
Bây giờ bạn có thể viết ví dụ cuối cùng ở dạng ngắn hơn bằng cách sử dụng biểu thức lambda cho Comparator:
Collections.sort(Database.arrayList,
(o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
Và Listcó một sort(Comparator)phương pháp, vì vậy bạn có thể rút ngắn điều này hơn nữa:
Database.arrayList.sort((o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
Đây là một thành ngữ phổ biến đến mức có một phương thức tích hợp sẵn để tạo Comparatormột lớp cho một Comparablekhóa:
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
Tất cả đều là những hình thức tương đương.