Cela peut être une ancienne réponse mais j'ai utilisé quelques exemples de ce poste pour créer un comparateur qui trierait un ArrayList
de HashMap<String, String>
par un objet dans la liste, qui étant l'horodatage.
J'ai ces objets:
ArrayList<Map<String, String>> alList = new ArrayList<Map<String, String>>();
Les objets cartographiques sont les suivants:
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");
Ce mappage est ce que j'utilise pour charger tous mes objets dans la liste de tableaux, en utilisant la alList.add(map)
fonction, dans une boucle.
Maintenant, j'ai créé mon propre comparateur:
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;
}
}
Je peux maintenant simplement appeler le comparateur à tout moment sur le tableau et il triera mon tableau, me donnant le dernier horodatage en position 0 (en haut de la liste) et le premier horodatage à la fin de la liste. Les nouveaux messages sont mis au sommet essentiellement.
Collections.sort(alList, new DateSorter());
Cela peut aider quelqu'un, c'est pourquoi je l'ai publié. Prenez en considération les instructions de retour dans la fonction compare (). Il existe 3 types de résultats. Renvoie 0 s'ils sont égaux, renvoie> 0 si la première date est antérieure à la deuxième date et renvoie <0 si la première date est postérieure à la deuxième. Si vous voulez que votre liste soit inversée, changez simplement ces deux instructions de retour! Simple =]