Как удалить из Map по дате рождения

141
04 июля 2019, 02:40

Надо удалить из словаря всех людей, родившихся летом. попытался через contains() не принимает

 public static void main(String[] args) throws ParseException{
    DateFormat df = new SimpleDateFormat ("MMMMM d yyyy", Locale.ENGLISH);
    HashMap<String, Date> map = new HashMap<String, Date> ();
    map.put ("Stallone", df.parse ("JUNE 1 1980"));
    //напишите тут ваш код
    map.put ("Stallone1", df.parse ("JULY 1 1981"));
    map.put ("Stallone2", df.parse ("AUGUST 1 1982"));
    map.put ("Stallone3", df.parse ("SEPTEMBER 1 1983"));
    map.put ("Stallone4", df.parse ("OCTOBER 1 1984"));
    map.put ("Stallone5", df.parse ("NOVEMBER 1 1985"));
    map.put ("Stallone6", df.parse ("AUGUST 1 1986"));
    map.put ("Stallone7", df.parse ("JUNE 1 1987"));
    map.put ("Stallone8", df.parse ("JUNE 1 1988"));
    map.put ("Stallone9", df.parse ("JUNE 1 1989"));
    for (HashMap.Entry<String, Date> pair : map.entrySet ()) {
        String key = pair.getKey ();
        Date value = pair.getValue ();
    }
}
Answer 1

Например, вы можете пройтись по словарю, проверить его значение (дата) и сохранить нужные ключи.

После, имея нужные ключи удалить их из словаря.

Пример:

    ...
    List<String> removeKeys = new ArrayList<>();
    for (HashMap.Entry<String, Date> pair : map.entrySet()) {
        String key = pair.getKey();
        Date value = pair.getValue();
        // Код для получения месяца
        Calendar cal = Calendar.getInstance();
        cal.setTime(value);
        int month = cal.get(Calendar.MONTH);
        // Включает в себя июнь, июль и август
        if (month >= 5 && month <= 7) {
            removeKeys.add(key);
        }
    }
    // Удаление из словаря
    map.keySet().removeAll(removeKeys);
    System.out.println(map);
    // {Stallone4=Mon Oct 01 00:00:00 YEKT 1984, Stallone5=Fri Nov 01 00:00:00 YEKT 1985, Stallone3=Thu Sep 01 00:00:00 YEKST 1983}

Еще можно решить это без дополнительных коллекций и переборов, используя итератор:

    Iterator<String> it = map.keySet().iterator();
    while (it.hasNext()) {
        String key = it.next();
        Date value = map.get(key);
        // Код для получения месяца
        Calendar cal = Calendar.getInstance();
        cal.setTime(value);
        int month = cal.get(Calendar.MONTH);
        // Включает в себя июнь, июль и август
        if (month >= 5 && month <= 7) {
            it.remove();
        }
    }
Answer 2
map.entrySet().removeIf(pair -> {
    int monthValue = pair.getValue().toInstant().atZone(ZoneId.systemDefault()).toLocalDate().getMonthValue();
    return monthValue >= 6 && monthValue <= 8;
});

Но я бы все таки изначально не использовал устаревшие классы Date или Calendar

READ ALSO
Вычисление размера mp3 фрейма

Вычисление размера mp3 фрейма

Пытаюсь разобраться в mp3 файлах, почитал вот эту статейку

142
Построение графика функции в java

Построение графика функции в java

ищу способ как в java по заданой формуле, например sin(x) построить графикПример:

159
Не создается экземпляр класса

Не создается экземпляр класса

Создаю экземпляр класса

135