可能重複:
TreeMap sort by value
Map that could be iterated in the order of values如何按(日期)值排序TreeMap?
我<String, Date>
類型的一個TreeMap。我想按日期排序(最近的第一個),我不能將它們用作鍵,因爲我不能保證它們是唯一的。有沒有辦法做到這一點?
可能重複:
TreeMap sort by value
Map that could be iterated in the order of values如何按(日期)值排序TreeMap?
我<String, Date>
類型的一個TreeMap。我想按日期排序(最近的第一個),我不能將它們用作鍵,因爲我不能保證它們是唯一的。有沒有辦法做到這一點?
你不能直接這樣做,你可以做的是集合的內容複製到一個新的,然後排序,如:
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
時再次執行此操作。
是基於當今日期的comaprsion和排序?像生日那樣? – Skynet
其實你可以在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項具有相同的密鑰,並且輸出由日期爲你想整理
根據定義,「Map」不能有一個鍵的兩個值。我錯過了什麼? –
測試中使用的比較器允許它。所有這些都取決於比較器和你的願望,如果需要的話,可以使TreeMap認爲2小於1。 –
哦,你的比較器永遠不會返回0. –
@Nambari,當值不唯一時,該問題的答案不起作用。 –
@Louis,當值不唯一時,爲什麼它不能工作? – ignis
@LouisWasserman:好的。其實我一直在尋找你的答案,但是我認爲我有同樣的工作。我正在刪除它。 – kosa