可能重复:
TreeMap sort by value
Map that could be iterated in the order of values
我有一个<String, Date>
类型的TreeMap。我希望按日期排序(最近的第一个),我不能将它们用作键,因为我不能保证它们是唯一的。有没有办法做到这一点?
答案 0 :(得分: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
时都必须再次进行此处理。
答案 1 :(得分:0)
实际上,如果你真的想要它,你可以在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个条目具有相同的密钥,输出按日期按日期排序