Kể từ khi Date
thực hiện Comparable
, nó có một compareTo
phương pháp giống như String
làm.
Vì vậy, tùy chỉnh của bạn Comparator
có 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 boolean
giố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à List
có 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 Comparator
một lớp cho một Comparable
khóa:
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
Tất cả đều là những hình thức tương đương.