Questa potrebbe essere una vecchia risposta, ma ho usato alcuni esempi di questo post per creare un comparatore che ordinasse uno ArrayListdi HashMap<String, String>un oggetto nell'elenco, ovvero il timestamp.
Ho questi oggetti:
ArrayList<Map<String, String>> alList = new ArrayList<Map<String, String>>();
Gli oggetti della mappa sono i seguenti:
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");
Quella mappatura è ciò che uso per caricare tutti i miei oggetti nell'elenco di array, usando la alList.add(map)funzione, all'interno di un loop.
Ora, ho creato il mio comparatore:
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;
}
}
Ora posso semplicemente chiamare il comparatore in qualsiasi momento sull'array e ordinerà il mio array, dandomi il timestamp più recente in posizione 0 (in cima all'elenco) e il timestamp più recente alla fine dell'elenco. I nuovi post vengono sostanzialmente messi in cima.
Collections.sort(alList, new DateSorter());
Questo può aiutare qualcuno, motivo per cui l'ho pubblicato. Prendi in considerazione le dichiarazioni di ritorno all'interno della funzione compare (). Esistono 3 tipi di risultati. Restituisce 0 se sono uguali, restituendo> 0 se la prima data è precedente alla seconda e restituendo <0 se la prima data è successiva alla seconda data. Se vuoi che la tua lista sia invertita, cambia semplicemente quelle due dichiarazioni di ritorno! Semplice =]