重複の可能性:
TreeMap 値による並べ替え 値
の順序で反復できるマップ
タイプの TreeMap があり<String, Date>
ます。日付で並べ替えたいのですが (最新のものを最初に)、それらが一意であるとは保証できないため、それらをキーとして使用することはできません。これを行う方法はありますか?
重複の可能性:
TreeMap 値による並べ替え 値
の順序で反復できるマップ
タイプの TreeMap があり<String, Date>
ます。日付で並べ替えたいのですが (最新のものを最初に)、それらが一意であるとは保証できないため、それらをキーとして使用することはできません。これを行う方法はありますか?
直接行うことはできません。できることは、コレクションのコンテンツを新しいものにコピーしてから並べ替えることです。次に例を示します。
List<Map.EntrySet<String, Date>> copy = new ArrayList<Map.EntrySet<String, Date>>(treeMap.entrySet());
Collections.sort(copy, new CustomComparator());
class CustomComparator implements Comparator<Map.Entry<String,Date>> {
public int compareTo(Map.Entry<String,Date> e1, Map.Entry<String,Date> e2) {
// compare your dates
}
}
もちろん、このコレクションは元のコレクションとは同期されないため、元のコレクションが変更されるたびに再度行う必要がありますTreeSet
。
実際、本当に必要な場合は、TreeMap に重複したキーを設定できます。
Map<Date, String> map = new TreeMap<Date, String>(new Comparator<Date>() {
@Override
public int compare(Date d1, Date d2) {
return d1.after(d2) ? 1 : -1;
}
});
Date d1 = new Date(-100000000000L);
Date d2 = new Date(100000000000L);
map.put(d2, "s1");
map.put(d1, "s2");
map.put(d1, "s3");
System.out.println(map);
出力
{Mon Oct 31 16:13:20 EET 1966=s3, Mon Oct 31 16:13:20 EET 1966=s2, Sat Mar 03 11:46:40 EET 1973=s1}
2 つのエントリが同じキーを持ち、出力は必要に応じて日付で並べ替えられることに注意してください。