Bu eski bir yanıt olabilir, ancak bu gönderideki bazı örnekleri, bir karşılaştırıcı oluşturmak için kullandım ArrayList
.HashMap<String, String>
zaman damgası olan bu listedeki bir obje tarafından.
Bu nesnelere sahibim:
ArrayList<Map<String, String>> alList = new ArrayList<Map<String, String>>();
Harita nesneleri aşağıdaki gibidir:
Map<String, Object> map = new HashMap<>();
map.put("timestamp", "MM/dd/yyyy HH:mm:ss");
map.put("item1", "my text goes here");
map.put("item2", "my text goes here");
Bu eşleme, tüm nesnelerimi dizi listesine yüklemek için kullandığım şeydir. alList.add(map)
bir döngü içinde işlevi .
Şimdi, kendi karşılaştırıcımı yarattım:
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;
}
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;
}
}
Artık dizide herhangi bir zamanda Karşılaştırıcıyı arayabilirim ve dizimi sıralayarak bana 0 konumundaki en son zaman damgasını (listenin en üstünde) ve listenin sonundaki en erken zaman damgasını verir. Yeni gönderiler temelde en üst sıraya yerleştirilir.
Collections.sort(alList, new DateSorter());
Bu birisine yardımcı olabilir, bu yüzden onu gönderdim. Compare () işlevindeki dönüş ifadelerini dikkate alın. 3 tür sonuç vardır. Eşitse 0 döndürür, ilk tarih ikinci tarihten önceyse> 0 döndürür ve ilk tarih ikinci tarihten sonraysa <0 döndürür. Listenizin tersine çevrilmesini istiyorsanız, o zaman bu iki dönüş ifadesini değiştirin! Basit =]