Ini mungkin sebuah respon lama tapi saya menggunakan beberapa contoh dari posting ini untuk membuat pembanding yang akan mengurutkan ArrayList
dari HashMap<String, String>
oleh satu objek dalam daftar, bahwa menjadi timestamp.
Saya punya benda-benda ini:
ArrayList<Map<String, String>> alList = new ArrayList<Map<String, String>>();
Objek peta adalah sebagai berikut:
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");
Pemetaan itu adalah apa yang saya gunakan untuk memuat semua objek saya ke dalam daftar array, menggunakan alList.add(map)
fungsi, dalam satu lingkaran.
Sekarang, saya membuat pembanding sendiri:
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;
}
}
Saya sekarang dapat memanggil Pembanding kapan saja pada array dan itu akan mengurutkan array saya, memberi saya cap waktu terbaru di posisi 0 (atas daftar) dan cap waktu paling awal di akhir daftar. Pada dasarnya posting baru ditempatkan di atas.
Collections.sort(alList, new DateSorter());
Ini dapat membantu seseorang, itulah sebabnya saya mempostingnya. Mempertimbangkan pernyataan pengembalian dalam fungsi compare (). Ada 3 jenis hasil. Mengembalikan 0 jika sama, mengembalikan> 0 jika kencan pertama sebelum kencan kedua dan mengembalikan <0 jika kencan pertama setelah kencan kedua. Jika Anda ingin daftar Anda dibalik, maka alihkan kedua pernyataan pengembalian itu! Sederhana =]