Поскольку Date
реализует Comparable
, он имеет метод compareTo
, как String
.
Итак, ваш пользовательский Comparator
может выглядеть так:
public class CustomComparator implements Comparator {
@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() {
@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));
Все это эквивалентные формы.
См. , человек находит . (конкретный часть приблизительно -exec
)
, Чтобы использование -exec
выполнило команду на каждом из найденных файлов, эти {}
, заменяется названием каждого файла, найденного, и команда завершается \;
В Вашем примере, всем файлам, найденным под текущим каталогом (.
), соответствуя имени *.clj
, будут работать на команде grep -r resources
их (для нахождения строки resources
, если это будет существовать в каждом из тех файлов).
Это на самом деле несколько избыточно, с тех пор -r
для того, чтобы рекурсивно искать подкаталоги, и это - то, что find
уже делает.
Рассмотрите эту альтернативную команду, которую я нахожу легче понять:
find . -name *.clj | xargs grep -r resources
В находке - исполнительный параметр захватывает остальную часть параметров сезам; (точка с запятой), которой нужно оставить, следовательно \;. в этом промежутке, {} заменяется осматриваемым именем файла.
Символьная строка "{}" будет заменена текущим обрабатываемым файлом. Завершенная точка с запятой завершает аргумент команды для - исполнительная опция.