これは、古いレスポンスかもしれないが、私は、並べ替えますコンパレータ作成するには、この記事からいくつかの例を使用ArrayList
するとHashMap<String, String>
、タイムスタンプされていることを、リスト内の1つのオブジェクトでは。
私はこれらのオブジェクトを持っています:
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;
}
}
これで、配列でいつでもコンパレータを呼び出すだけで配列をソートし、位置0(リストの最上部)の最新のタイムスタンプとリストの最後の最も早いタイムスタンプを取得できます。新しい投稿は基本的にトップに置かれます。
Collections.sort(alList, new DateSorter());
これは誰かを助けるかもしれません、それが私がそれを投稿した理由です。compare()関数内のreturnステートメントを考慮してください。結果には3つのタイプがあります。等しい場合は0を返し、最初の日付が2番目の日付より前の場合は> 0を返し、最初の日付が2番目の日付より後である場合は<0を返します。リストを逆にしたい場合は、これら2つのreturnステートメントを切り替えるだけです!シンプル=]