Я пытаюсь получить последний элемент даты в наборе, однако он продолжает возвращать первый? - PullRequest
0 голосов
/ 17 октября 2018

Ниже приведен мой код, я получаю ключи от своей карты, а затем перебираю их, чтобы получить последнюю дату, однако, кажется, что она не получает последнюю дату.Значения в этой строке 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();

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Кажется, вы следовали этому ответу .Уже сказано:

A Collection не обязательно заказанный набор

В вашем случае он не работает , потому что

Порядок карты определяется как порядок, в котором итераторы в представлениях коллекции карты возвращают свои элементы.Некоторые реализации карт, такие как класс TreeMap, дают определенные гарантии относительно их порядка;другие, такие как класс HashMap, этого не делают.

И, очевидно, Map date не гарантирует конкретный заказ.Это относится также к Set<Date> keys = date.keySet() , так как это

Возвращает Set представление ключей, содержащихся в этой карте ... при поддержке карты ...

Но решение простое и выходит из коробки:

Date lastDate = Collections.max(keys);

Это работает сразу, потому что Date реализует Comparable.

0 голосов
/ 17 октября 2018

Используете ли вы LinkedHashMap или HashMap?

HashMap не упорядочен Карта.LinkedHashMap упорядочен Карта, которая резервирует порядок вставки.

Но я думаю, что вы должны использовать TreeSet, который может сортировать ваши даты.В результате вам не нужно заботиться о том, что за карта:)

...