Ключи поиска по хэш-карте Java для даты - PullRequest
4 голосов
/ 19 августа 2011

У меня есть хэш-карта: Map dateEvent = new HashMap ();где ключ - это дата, время и значение - строка.Заполняю сборник данными, где дата в формате дд.ММ.гггг ЧЧ: мм.Как я могу получить все ключи с датой на основе этого формата: dd.MM.yyyy?

Ответы [ 4 ]

10 голосов
/ 19 августа 2011

Этот код поможет:

public static void findEvents(Map<Date, Event> dateEvents, Date targetDate) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
    String target = dateFormat.format(targetDate); 
    for (Map.Entry<Date, Event> entry : dateEvents.entrySet()) {
        if (dateFormat.format(entry.getKey()).equals(target)) {
            System.out.println("Event " + entry.getValue() + " is on the specified date");
        }
    }
}

Здесь важно то, что все даты перед сравнением преобразуются в строку с форматом "dd.MM.yyyy", поэтому любые различия в часах /минуты и секунды по-прежнему совпадают, если день совпадает.

Этот код также демонстрирует лучший способ (ИМХО) для итерации по карте.

0 голосов
/ 19 августа 2011

У вас есть (как минимум) два варианта:

Вы можете написать свой собственный класс Date, который предоставляет соответствующие реализации hashCode() и equals(). (Если вы сделаете это, не рекомендуется создавать этот класс для другого класса, который уже определяет эти методы (например, java.util.Date).)

Альтернативой грубой силы является сканирование всех ключей на предмет соответствия вашим критериям.

0 голосов
/ 19 августа 2011

Нет разницы между датой 01.01.2011 (дд.мм.гггг) и датой 01.01.2011 00:00 ( дд.мм.гггг ЧЧ: мм) .

Date содержит long, в котором есть часы и минуты.Даже для public Date(int year, int month, int date)

0 голосов
/ 19 августа 2011

Не уверен, правильно ли я вас понял. Однако вы получаете набор ключей с карты, используя map.keySet(). Если вы хотите найти все разные даты, заполните все даты в наборе. Если вы хотите снизить точность до дней, одним из решений будет преобразование даты в желаемый формат и добавление этих строк в набор. Дубликаты будут удалены автоматически.

Например:

Map<Date, String> yourMap = [..];

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd.MM.yyyy");

Set<String> differentDates = new HashSet<String>();
for (Date date: yourMap.keySet()) {
    differentDates.add(simpleDateFormat.format(date));
}
...