Це може бути старий відповідь , але я використав кілька прикладів з цього поста , щоб створити компаратор , який буде сортувати 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");
Це відображення - це те, що я використовую для завантаження всіх моїх об'єктів у список масивів, використовуючи 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;
}
}
Тепер я можу просто зателефонувати на компаратор у будь-який час на масив, і він буде сортувати мій масив, даючи мені останню часову позначку в позиції 0 (вгорі списку) та найдавнішу часову позначку в кінці списку. Нові повідомлення в основному ставлять на початок.
Collections.sort(alList, new DateSorter());
Це може допомогти комусь, тому я і розмістив це. Враховуйте твердження про повернення в межах функції порівняння (). Є 3 типи результатів. Повернення 0, якщо вони рівні, повернення> 0, якщо перша дата є перед другою датою, і повернення <0, якщо перша дата є після другої дати. Якщо ви хочете, щоб ваш список був перетворений, просто перемкніть ці два заяви про повернення! Простий =]