Dies mag eine alte Antwort sein, aber ich habe einige Beispiele aus diesem Beitrag verwendet, um einen Komparator zu erstellen, der eine Art ArrayList
von sortiertHashMap<String, String>
ein Objekt nach einem in der Liste , dh dem Zeitstempel.
Ich habe diese Objekte:
ArrayList<Map<String, String>> alList = new ArrayList<Map<String, String>>();
Die Kartenobjekte sind wie folgt:
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");
Mit dieser Zuordnung lade ich alle meine Objekte mithilfe der alList.add(map)
Funktion innerhalb einer Schleife in die Array-Liste .
Jetzt habe ich meinen eigenen Komparator erstellt:
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;
}
}
Ich kann jetzt einfach den Komparator jederzeit auf dem Array aufrufen und er sortiert mein Array, wobei ich den neuesten Zeitstempel an Position 0 (oben in der Liste) und den frühesten Zeitstempel am Ende der Liste erhalte. Neue Beiträge werden grundsätzlich an die Spitze gesetzt.
Collections.sort(alList, new DateSorter());
Dies kann jemandem helfen, weshalb ich es gepostet habe. Berücksichtigen Sie die return-Anweisungen in der Funktion compare (). Es gibt 3 Arten von Ergebnissen. Rückgabe von 0, wenn sie gleich sind, Rückgabe von> 0, wenn das erste Datum vor dem zweiten Datum liegt, und Rückgabe von <0, wenn das erste Datum nach dem zweiten Datum liegt. Wenn Sie möchten, dass Ihre Liste umgekehrt wird, wechseln Sie einfach diese beiden return-Anweisungen! Einfach =]