Сортировать объекты в ArrayList по дате? - PullRequest
127 голосов
/ 08 мая 2011

Каждый пример, который я нахожу, касается этого по алфавиту, в то время как мои элементы сортируются по дате.

Мой ArrayList содержит объекты, для которых одна из камер данных является объектом DateTime.В DateTime я могу вызывать функции:

lt() // less-than
lteq() // less-than-or-equal-to

Поэтому для сравнения я могу сделать что-то вроде:

if(myList.get(i).lt(myList.get(j))){
    // ...
}

Что мне делать внутри блока if?

Ответы [ 12 ]

0 голосов
/ 04 апреля 2016

Передайте аргумент ArrayList In.

    private static void order(ArrayList<Object> list) {

    Collections.sort(list, new Comparator() {

        public int compare(Object o2, Object o1) {

            String x1 =  o1.Date;
            String x2 =  o2.Date;

                return  x1.compareTo(x2);

        }
    });
}
0 голосов
/ 03 ноября 2015

Это может быть старый ответ, но я использовал несколько примеров из этого поста, чтобы создать компаратор, который бы сортировал ArrayList из HashMap<String, String> по одному объекту в списке, который является временной меткой.

У меня есть следующие объекты:

ArrayList<Map<String, String>> alList = new ArrayList<Map<String, String>>();

Объекты карты следующие:

Map<String, Object> map = new HashMap<>();
        // of course this is the actual formatted date below in the timestamp
        map.put("timestamp", "MM/dd/yyyy HH:mm:ss"); 
        map.put("item1", "my text goes here");
        map.put("item2", "my text goes here");

Это отображение - то, что я использую для загрузки всех своих объектов в массивlist, используя функцию alList.add(map) внутри цикла.

Теперь я создал свой собственный компаратор:

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;

 public class DateSorter implements Comparator {
     public int compare(Object firstObjToCompare, Object secondObjToCompare) {
    String firstDateString = ((HashMap<String, String>) firstObjToCompare).get("timestamp");
    String secondDateString = ((HashMap<String, String>) secondObjToCompare).get("timestamp");

    if (secondDateString == null || firstDateString == null) {
        return 0;
    }

    // Convert to Dates
    DateTimeFormatter dtf = DateTimeFormat.forPattern("MM/dd/yyyy HH:mm:ss");
    DateTime firstDate = dtf.parseDateTime(firstDateString);
    DateTime secondDate = dtf.parseDateTime(secondDateString);

    if (firstDate.isAfter(secondDate)) return -1;
    else if (firstDate.isBefore(secondDate)) return 1;
    else return 0;
    }
}

Теперь я могу просто вызвать Comparator в любое время в массиве ион будет сортировать мой массив, давая мне самую последнюю метку времени в позиции 0 (вверху списка) и самую раннюю метку времени в конце списка.Новые сообщения в основном попадают в топ.

Collections.sort(alList, new DateSorter());

Это может кому-то помочь, вот почему я его опубликовал.Примите во внимание оператор возврата в функции сравнения ().Есть 3 типа результатов.Возвращает 0, если они равны, возвращает> 0, если первая дата предшествует второй дате, и возвращает <0, если первая дата идет после второй даты.Если вы хотите, чтобы ваш список был перевернут, просто переключите эти два оператора возврата!Простой =] </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...