首页 > 解决方案 > 我正在尝试获取集合中的最后一个日期元素,但是它一直返回第一个?

问题描述

下面是我的代码,我得到了我的 Map 的键,然后我遍历它们以获得最后一个日期,但是它似乎没有得到最后一个日期。此行Set<Date> keys = date.keySet();的值为 10.31.18 和 11.17.18。我希望 lastDate 等于 11.17.18 但它等于 10.31.18。任何想法我在这里做错了什么。

Map<Date, List<Integer>> date = date(dates, noPupils);
                Set<Date> keys = date.keySet();
                for (Iterator<Date> it = keys.iterator(); it.hasNext();) {
                    while (it.hasNext()) {
                        Date lastDate = it.next();

标签: javaloopsiteratorsetkey

解决方案


看来您遵循了这个答案。它已经说:

ACollection不一定是有序集

在你的情况下它不起作用,因为

地图的顺序定义为地图集合视图上的迭代器返回其元素的顺序。一些地图实现,比如TreeMap类,对它们的顺序做出特定的保证;其他人,像HashMap班级一样,没有。

显然,Map date并不能保证特定的顺序。这也适用Set<Date> keys = date.keySet()

返回Set此映射中包含的键的视图...由映射支持...

但解决方案很简单,而且开箱即用:

Date lastDate = Collections.max(keys);

这立即起作用,因为Date实现了Comparable.


推荐阅读