如何按(日期)值对TreeMap进行排序?

时间:2012-12-12 17:27:54

标签: java treemap

  

可能重复:
  TreeMap sort by value
  Map that could be iterated in the order of values

我有一个<String, Date>类型的TreeMap。我希望按日期排序(最近的第一个),我不能将它们用作键,因为我不能保证它们是唯一的。有没有办法做到这一点?

2 个答案:

答案 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个条目具有相同的密钥,输出按日期按日期排序