Каждый пример, который я нахожу, касается алфавитного подхода, в то время как мои элементы сортируются по дате.
Мой ArrayList содержит объекты, для которых одна из камер данных является объектом DateTime. На DateTime я могу вызвать функции:
lt() // less-than
lteq() // less-than-or-equal-to
Поэтому для сравнения я мог бы сделать что-то вроде:
if(myList.get(i).lt(myList.get(j))){
// ...
}
Что я должен делать внутри блока if?
Ответы:
Вы можете сделать свой объект сопоставимым:
А потом вы сортируете это по телефону:
Однако иногда вы не хотите менять свою модель, например, когда вы хотите отсортировать по нескольким различным свойствам. В этом случае вы можете создать компаратор на лету:
Однако вышеприведенное работает только в том случае, если вы уверены, что dateTime не является нулевым во время сравнения. Целесообразно также обрабатывать null, чтобы избежать исключений NullPointerExceptions:
Или во втором примере:
источник
Начиная с Java 8 интерфейс List предоставляет метод sort . В сочетании с лямбда- выражением самым простым решением будет
Обратная сортировка
В Java 8 также есть несколько удобных методов обратной сортировки.
источник
list.sort(Comparator.comparing(o -> o.getDateTime()));
list.sort(Comparator.comparing(MyObject::getDateTime)
Вы можете использовать метод Collections.sort. Это статический метод. Вы передаете это список и компаратор. Он использует модифицированный алгоритм сортировки слиянием по списку. Вот почему вы должны передать ему компаратор для парных сравнений.
Обратите внимание, что если myList имеет сопоставимый тип (тот, который реализует интерфейс Comparable) (например, Date, Integer или String), вы можете опустить компаратор, и будет использоваться естественный порядок.
источник
Лучший ответ ИМХО от Тунаки с использованием Java 8 лямбда
источник
Учитывая,
MyObject
что у него естьDateTime
член сgetDateTime()
методом, вы можете отсортировать объектArrayList
, содержащийMyObject
элементы, по следующимDateTime
объектам:источник
Вот как я решил:
Надеюсь, это поможет вам.
источник
С появлением Java 1.8 потоки очень полезны для решения таких проблем:
источник
Все ответы, которые я здесь нашел, оказались неоправданно сложными для простой задачи (по крайней мере, для опытного разработчика Java, которым я не являюсь). У меня была похожая проблема, и я случайно наткнулся на это (и другие) решения, и хотя они предоставили указатель, для новичка, которого я нашел, как указано выше. Мое решение зависит от того, где в Объекте ваша Дата находится, в данном случае, дата является первым элементом Объекта [], где dataVector - это ArrayList, содержащий ваши Объекты.
источник
DateTime
объекта, который содержится внутри другого объекта. Если бы это были только объектыDate
илиDateTime
объекты, в которыхComparable
не было бы никакой необходимостиComparator
.Это может быть старый ответ , но я использовал несколько примеров из этого поста , чтобы создать компаратор , который будет сортировать
ArrayList
поHashMap<String, String>
одним объектом в списке, что является метка времени.У меня есть эти объекты:
Объекты карты следующие:
Это отображение - то, что я использую, чтобы загрузить все мои объекты в список массивов, используя
alList.add(map)
функцию, внутри цикла.Теперь я создал свой собственный компаратор:
Теперь я могу просто вызвать Comparator в любое время в массиве, и он будет сортировать мой массив, давая мне самую последнюю временную метку в позиции 0 (вверху списка) и самую раннюю временную метку в конце списка. Новые посты попадают в топ в принципе.
Это может помочь кому-то, поэтому я опубликовал это. Примите во внимание оператор возврата в функции сравнения (). Есть 3 типа результатов. Возвращает 0, если они равны, возвращает> 0, если первая дата предшествует второй дате, и возвращает <0, если первая дата идет после второй даты. Если вы хотите, чтобы ваш список был перевернут, просто переключите эти два оператора возврата! Простой =]
источник
Передайте аргумент ArrayList In.
источник
Используйте следующий подход, чтобы определить даты сортировки или нет
источник
SimpleDateFormat
занятием. По крайней мере, не в качестве первого варианта. И не без оговорок. Сегодня у нас намного лучше вjava.time
современном API даты и времени Java и егоDateTimeFormatter
.Класс Date уже реализует интерфейс Comparator. Предполагая, что у вас есть класс ниже:
Допустим, у вас есть список объектов A
List<A> aList
, который можно легко отсортировать с помощью потокового API Java 8 (фрагмент ниже):источник
Будущие зрители, я думаю, что это самое простое решение, если ваша модель содержит строковый тип даты (например, «2020-01-01 10:00:00»), а затем просто напишите следующую строку, чтобы отсортировать данные по дате по убыванию из самый новый для самого старого:
источник