Esto puede ser una respuesta de edad pero utilizado algunos ejemplos de este post para crear un comparador que ordenar un ArrayList
de HashMap<String, String>
por un objeto en la lista, que es la marca de tiempo.
Tengo estos objetos:
ArrayList<Map<String, String>> alList = new ArrayList<Map<String, String>>();
Los objetos del mapa son los siguientes:
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");
Ese mapeo es lo que uso para cargar todos mis objetos en la lista de la matriz, usando la alList.add(map)
función, dentro de un bucle.
Ahora, creé mi propio comparador:
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;
}
}
Ahora puedo llamar al Comparador en cualquier momento en la matriz y ordenará mi matriz, dándome la última marca de tiempo en la posición 0 (parte superior de la lista) y la marca de tiempo más temprana al final de la lista. Las nuevas publicaciones se colocan en la parte superior básicamente.
Collections.sort(alList, new DateSorter());
Esto puede ayudar a alguien, por eso lo publiqué. Tenga en cuenta las declaraciones de devolución dentro de la función compare (). Hay 3 tipos de resultados. Devuelve 0 si son iguales, devuelve> 0 si la primera fecha es anterior a la segunda y devuelve <0 si la primera fecha es posterior a la segunda fecha. Si desea que su lista se invierta, ¡simplemente cambie esas dos declaraciones de devolución! Simple =]