Как избежать ConcurrentModificationException в этом случае? - PullRequest
0 голосов
/ 22 октября 2019

Я понимаю, что когда я пытаюсь изменить (добавить в этом случае) список, я получил ConcurrentModificationException, но как лучше всего это исправить?

for (Map.Entry<String, Child> entry : children.entrySet() {
     childEvent.child = entry.getValue();
     if (childEvent.getDate() != null && childEvent.getDate().equals(selectedDate)) {
         if(this.selectedDayevents.isEmpty()) {
             // List                                
             this.selectedDayevents.add(childEvent);
          }
         for (CareDay selectedCareDay : this.selectedDayevents) {
             // Here I have to combine data in some cases...
         }
     }  
}

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

Один простой способ обойти эту проблему - перебрать копию набора записей:

for (Map.Entry<String, Child> entry : new HashSet<>(children.entrySet())) {
    // same code
}

Если ваша карта не слишком большая и вы делаете это не оченьчасто вы не заметите разницу в производительности.

0 голосов
/ 22 октября 2019

Если вы хотите включить параллельный доступ к коллекции, вам следует изучить API-интерфейсы java для параллелизма и особенно ConcurrentHashMap или ConcurrentSkipListMap для вашего случая.

...