Простая команда Unix, что {} и \; для

Поскольку 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));

Все это эквивалентные формы.

14
задан Joel Coehoorn 15 January 2009 в 15:06
поделиться

4 ответа

См. , человек находит . (конкретный часть приблизительно -exec)

, Чтобы использование -exec выполнило команду на каждом из найденных файлов, эти {}, заменяется названием каждого файла, найденного, и команда завершается \;

В Вашем примере, всем файлам, найденным под текущим каталогом (.), соответствуя имени *.clj, будут работать на команде grep -r resources их (для нахождения строки resources, если это будет существовать в каждом из тех файлов).

Это на самом деле несколько избыточно, с тех пор -r для того, чтобы рекурсивно искать подкаталоги, и это - то, что find уже делает.

27
ответ дан 1 December 2019 в 08:20
поделиться

Рассмотрите эту альтернативную команду, которую я нахожу легче понять:

find . -name *.clj | xargs grep -r resources 
2
ответ дан 1 December 2019 в 08:20
поделиться

В находке - исполнительный параметр захватывает остальную часть параметров сезам; (точка с запятой), которой нужно оставить, следовательно \;. в этом промежутке, {} заменяется осматриваемым именем файла.

3
ответ дан 1 December 2019 в 08:20
поделиться

Символьная строка "{}" будет заменена текущим обрабатываемым файлом. Завершенная точка с запятой завершает аргумент команды для - исполнительная опция.

1
ответ дан 1 December 2019 в 08:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: