我有一个 TreeMap 类型<String, Date>
。我想按日期对它进行排序(最近的在前),我不能将它们用作键,因为我不能保证它们是唯一的。有没有办法做到这一点?
问问题
8233 次
2 回答
5
不能直接做,可以做的是将集合的内容复制到一个新的,然后排序,例如:
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
修改原始集合时都必须重新进行。
于 2012-12-12T17:33:51.783 回答
1
实际上,如果你真的想要的话,你可以在 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 个条目具有相同的键,并且输出按您想要的日期排序
于 2012-12-12T17:47:17.317 回答