TreeMap按星期几排序,而不是每月的某天

时间:2015-10-30 04:46:54

标签: java collections

我有TreeMap但是,它没有正确排序。它也缺少一些值,但我相信它是因为Hashmap会看到一周中的多天并将它们取出。

这是我的代码:

public Map<Date, String> findDates() throws ParseException {
    TypedQuery<InstallationDate> query = em.createNamedQuery("InstallationDate.findDates", InstallationDate.class);

    List<InstallationDate> dates = null;
    try {
        dates = query.getResultList();
    } catch (NoResultException nre) {
        nre.printStackTrace(System.out);
    }

    Map<Date, String> installationDates = null;
    if (dates != null) {
        installationDates = new HashMap<Date, String>();
        for (InstallationDate date : dates) {
            DateFormat f = new SimpleDateFormat("EE dd MMMMMMMMM YYYY");
            installationDates.put(f.parse(date.getInstallation_day()), date.getInstallation_day());

        }
    }
    Map<Date, String> treeMap = new TreeMap<Date, String>(installationDates);
    return treeMap;
}

我得到的是:

Sunday 15 November 2015
Monday 16 November 2015 
Tuesday 10 November 2015
Wednesday 11 November 2015
Thursday 12 November 2015
Friday 13 November 2015
Saturday 14 November 2015

但我需要的是:

Tuesday 3 November 2015
Wednesday 4 November 2015
Thursday 5 November 2015
Friday 6 November 2015

......依此类推Monday 16 November 2015

有人能告诉我我做错了吗?

感谢。

1 个答案:

答案 0 :(得分:0)

您需要编写自己的比较器

您没有显示InstallationDate类的代码。

我已经简化了您的代码,建议您关注compare()Comparator方法。

public static void findDates() throws ParseException {

        List<Date> dates = new ArrayList<Date>();
        DateFormat format = new SimpleDateFormat("MMMM d yyyy", Locale.ENGLISH);

        dates.add(format.parse("November 15 2015"));
        dates.add(format.parse("November 16 2015"));
        dates.add(format.parse("November 10 2015"));
        dates.add(format.parse("November 11 2015"));
        dates.add(format.parse("November 12 2015"));
        dates.add(format.parse("November 13 2015"));
        dates.add(format.parse("November 14 2015"));

        Map<Date, String> installationDates = new HashMap<Date, String>();

        for (Date date : dates) {
            String day = new Integer(date.getDay()).toString();
            installationDates.put(date, day);
        }

        Map<Date, String> treeMap = new TreeMap<Date, String>(
                new Comparator<Date>() {
                    @Override
                    public int compare(Date date1, Date date2) {
                        return date1.compareTo(date2);
                    }
                });

        treeMap.putAll(installationDates);
        for (Entry<Date, String> entry : treeMap.entrySet()) {
            DateFormat f = new SimpleDateFormat("EE dd MMMMMMMMM YYYY",Locale.ENGLISH);
            System.out.println(f.format(entry.getKey()) );
        }
    }

输出:

Tue 10 November 2015
Wed 11 November 2015
Thu 12 November 2015
Fri 13 November 2015
Sat 14 November 2015
Sun 15 November 2015
Mon 16 November 2015