Оскільки Date
реалізує Comparable
, він має compareTo
метод, як String
і у нас.
Так ваш звичай Comparator
може виглядати так:
public class CustomComparator implements Comparator<MyObject> {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
}
compare()
Метод повинен повертати int
, так що ви не могли безпосередньо повертати , boolean
як ви планували в будь-якому випадку.
Ваш код сортування буде приблизно таким, як ви писали:
Collections.sort(Database.arrayList, new CustomComparator());
Трохи коротший спосіб записати все це, якщо вам не потрібно повторно використовувати компаратор, - це записати його як вбудований анонімний клас:
Collections.sort(Database.arrayList, new Comparator<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
return o1.getStartDate().compareTo(o2.getStartDate());
}
});
Тепер ви можете написати останній приклад у коротшій формі, використовуючи лямбда-вираз для Comparator
:
Collections.sort(Database.arrayList,
(o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
І List
є sort(Comparator)
метод, тож ви можете ще більше скоротити це:
Database.arrayList.sort((o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
Це така поширена ідіома, що існує вбудований метод для створення Comparator
класу з Comparable
клавішею:
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
Все це є рівнозначними формами.