Написал цикл для удаления записей с летним месяцем в дате, но при попытке запустить программу и вывести на экран содержимое Map после отработки метода removeAllSummerPeople программа выбрасывает исключение ConcurrentModificationException. Если же изменить
map.remove(entry.getKey()) на map.remove(entry)то программа отработает, но искомых записей не удалит. Помогите установить причину ошибки.
По условию задачи на экран выводить ничего не нужно, так что весь код в main просто для самопроверки.package com.javarush.task.task08.task0816;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
/*
Добрая Зинаида и летние каникулы
*/
public class Solution {
public static Map<String, Date> createMap() throws ParseException {
DateFormat dateFormat = new SimpleDateFormat("MMMMM d yyyy", Locale.ENGLISH);
Map<String, Date> map = new HashMap<>();
map.put("Сталлоне", dateFormat.parse("MAY 1 2012"));
map.put("Алексей",dateFormat.parse("JANUARY 12 1996"));
map.put("Светлана",dateFormat.parse("JUNE 20 2000"));
map.put("Константин",dateFormat.parse("JANUARY 1 2010"));
map.put("Анастасия",dateFormat.parse("MARCH 20 1999"));
map.put("Семен",dateFormat.parse("JULY 11 1985"));
map.put("Александр",dateFormat.parse("AUGUST 30 1990"));
map.put("Арнольд",dateFormat.parse("APRIL 30 1947"));
map.put("Мария",dateFormat.parse("SEPTEMBER 9 1998"));
map.put("Ирина",dateFormat.parse("OCTOBER 15 2005"));
return map;
}
public static void removeAllSummerPeople(Map<String, Date> map) {
for(Map.Entry<String,Date> entry: map.entrySet())
{
if(entry.getValue().getMonth()==6||entry.getValue().getMonth()==7||entry.getValue().getMonth()==8)
map.remove(entry.getKey());
}
}
public static void main(String[] args) throws ParseException {
Map map=createMap();
for(Object entry:map.entrySet()) System.out.println(entry);
removeAllSummerPeople(map);
System.out.println();
for(Object entry:map.entrySet()) System.out.println(entry);
}
}