Esta pode ser uma resposta antiga, mas usei alguns exemplos deste post para criar um comparador que classificaria um ArrayList
de HashMap<String, String>
um objeto na lista, sendo esse o carimbo de data / hora.
Eu tenho estes objetos:
ArrayList<Map<String, String>> alList = new ArrayList<Map<String, String>>();
Os objetos do mapa são os seguintes:
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");
Esse mapeamento é o que eu uso para carregar todos os meus objetos na lista de matrizes, usando a alList.add(map)
função, dentro de um loop.
Agora, eu criei meu próprio 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;
}
}
Agora posso chamar o Comparador a qualquer momento na matriz e ela classificará minha matriz, fornecendo o carimbo de data / hora mais recente na posição 0 (topo da lista) e o carimbo de data / hora mais antigo no final da lista. Novas postagens são colocadas no topo basicamente.
Collections.sort(alList, new DateSorter());
Isso pode ajudar alguém, e é por isso que eu postei. Leve em consideração as instruções de retorno na função compare (). Existem 3 tipos de resultados. Retornando 0 se forem iguais, retornando> 0 se a primeira data for anterior à segunda data e retornando <0 se a primeira data for posterior à segunda data. Se você deseja que sua lista seja revertida, basta alternar essas duas instruções de retorno! Simples =]