繁体   English   中英

我正在尝试获取集合中的最后一个date元素,但是它一直返回第一个?

[英]I am trying to get the last date element in a set, however It keeps returning the first one?

下面是我的代码,我获取了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();

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

Collection不一定是有序集合

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

映射的顺序定义为映射的集合视图上的迭代器返回其元素的顺序。 一些地图实现(例如TreeMap类)对其顺序做出特定的保证。 其他的(例如HashMap类)则没有。

显然, Map date不能保证特定的订单。 这也适用于Set<Date> keys = date.keySet() 因为这

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

但是解决方案很简单,可以立即使用:

Date lastDate = Collections.max(keys);

由于Date实现Comparable因此可以立即工作。

您正在使用LinkedHashMap还是HashMap?

HashMap没有排序的Map。 LinkedHashMap是有序地图,保留插入顺序。

但是我认为您应该使用TreeSet来对日期进行排序。 因此,您无需关心哪种Map :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM