我有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
有人能告诉我我做错了吗?
感谢。
答案 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