Это может быть старый ответ, но я использовал несколько примеров из этого поста, чтобы создать компаратор, который бы сортировал 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>