可能重复:
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