이 오래된 응답 할 수 있지만, 나는 정렬 할 것 비교기 만들려면이 게시물에서 몇 가지 예를 사용하는 ArrayList의를 HashMap<String, String>타임 스탬프 인 것을, 목록에서 하나의 객체로한다.
나는이 물건들을 가지고있다 :
ArrayList<Map<String, String>> alList = new ArrayList<Map<String, String>>();
지도 객체는 다음과 같습니다.
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");
이 매핑은 alList.add(map)루프 내 에서 함수를 사용하여 모든 객체를 배열 목록에로드하는 데 사용됩니다 .
이제 나는 내 자신의 비교기를 만들었습니다.
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;
}
}
이제 배열에서 언제든지 Comparator를 호출 할 수 있으며 배열을 정렬하여 위치 0의 최신 타임 스탬프 (목록 맨 위)와 목록 끝의 가장 빠른 타임 스탬프를 제공합니다. 기본적으로 새로운 게시물이 맨 위에 표시됩니다.
Collections.sort(alList, new DateSorter());
이것은 누군가를 도울 수 있기 때문에 내가 게시 한 이유입니다. compare () 함수 내에서 return 문을 고려하십시오. 3 가지 유형의 결과가 있습니다. 동일한 경우 0을 리턴하고 첫 번째 날짜가 두 번째 날짜 이전 인 경우> 0을 리턴하고 첫 번째 날짜가 두 번째 날짜 이후 인 경우 <0을 리턴합니다. 목록을 뒤집으려면 두 반환 문을 바꾸십시오! 단순 =]