Đây có thể là một phản ứng cũ nhưng tôi đã sử dụng một số ví dụ từ bài này để tạo ra một so sánh rằng sẽ sắp xếp một ArrayList
số HashMap<String, String>
bởi một đối tượng trong danh sách, đó là dấu thời gian.
Tôi có những đối tượng này:
ArrayList<Map<String, String>> alList = new ArrayList<Map<String, String>>();
Các đối tượng bản đồ như sau:
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");
Ánh xạ đó là những gì tôi sử dụng để tải tất cả các đối tượng của mình vào danh sách mảng, sử dụng alList.add(map)
hàm, trong một vòng lặp.
Bây giờ, tôi đã tạo ra bộ so sánh của riêng mình:
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;
}
}
Bây giờ tôi có thể gọi Trình so sánh bất cứ lúc nào trên mảng và nó sẽ sắp xếp mảng của tôi, đưa cho tôi dấu thời gian mới nhất ở vị trí 0 (đầu danh sách) và dấu thời gian sớm nhất ở cuối danh sách. Bài viết mới được đưa lên đầu về cơ bản.
Collections.sort(alList, new DateSorter());
Điều này có thể giúp ai đó ra ngoài, đó là lý do tại sao tôi đăng nó. Hãy xem xét các câu lệnh return trong hàm so sánh (). Có 3 loại kết quả. Trả về 0 nếu chúng bằng nhau, trả về> 0 nếu ngày đầu tiên trước ngày thứ hai và trả về <0 nếu ngày đầu tiên là sau ngày thứ hai. Nếu bạn muốn danh sách của bạn bị đảo ngược, thì chỉ cần chuyển hai câu trả về đó! Đơn giản =]