Поскольку Date
реализует _ 2_, у него есть метод 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)
< / a>, так что вы можете сократить его еще больше:
Database.arrayList.sort((o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
Это настолько распространенная идиома, что существует встроенный метод для создания Comparator
для класса с Comparable
ключом:
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
Все это эквивалентные формы.
person
Michael Myers
schedule
06.05.2010