Каждый пример, который я нахожу, касается выполнения этого в алфавитном порядке, в то время как мне нужно, чтобы мои элементы были отсортированы по дате.
Мой ArrayList содержит объекты, в которых один из элементов данных является объектом DateTime . В DateTime я могу вызывать функции:
lt() // less-than lteq() // less-than-or-equal-to
Итак, для сравнения я мог бы сделать что-то вроде:
Однако иногда вам не хочется менять свою модель, например, когда вы хотите выполнить сортировку по нескольким разным свойствам. В этом случае вы можете создать comparator "на лету":
Однако вышеописанное работает, только если вы уверены, что DateTime не равно null на момент сравнения. Разумно также обрабатывать null, чтобы избежать исключений NullPointerExceptions:
Since Java 8 the List interface provides the sort method. Combined with lambda expression the easiest solution would be
// sort DateTime typed list list.sort((d1,d2) -> d1.compareTo(d2)); // or an object which has an DateTime attribute list.sort((o1,o2) -> o1.getDateTime().compareTo(o2.getDateTime())); // or like mentioned by Tunaki list.sort(Comparator.comparing(o -> o.getDateTime()));
Reverse sorting
Java 8 comes also with some handy methods for reverse sorting.
//requested by lily list.sort(Comparator.comparing(o -> o.getDateTime()).reversed());
Ответ 3
You can use Collections.sort method. It's a static method. You pass it the list and a comparator. It uses a modified mergesort algorithm over the list. That's why you must pass it a comparator to do the pair comparisons.
Note that if myList is of a comparable type (one that implements Comparable interface) (like Date, Integer or String) you can omit the comparator and the natural ordering will be used.