ConcurrentModificationException
генерируется, когда итеративная коллекция модифицируется извне, т.е. не через итератор.Поэтому вам нужно использовать Iterator.remove()
, чтобы избежать этого исключения.Более того, вместо добавления непосредственно в коллекцию во время итерации по ней, сохраните элементы, которые нужно добавить, в отдельную коллекцию, а затем добавьте их впоследствии:
List<RuleModel> toBeAdded = new ArrayList<RuleModel>();
if(currentReceived.getStatus()!="D")
{
//replace the existing rule with the new one
itReceivedRulesExisting.remove();
toBeAdded.add(currentReceived);
}
else
{
itReceivedRulesExisting.remove();
}
...
// after the loop terminated:
receivedRulesExisting.addAll(toBeAdded);
Обратите внимание, что я использовал универсальную коллекцию - этоЖелательно сделать так, чтобы обеспечить безопасность типов и избавиться от даункастов, например, так:
Collection<RuleModel> myRulesIncr = ...
...
Iterator<RuleModel> itReceivedRules = myRulesIncr.iterator();
...
RuleModel currentReceived = itReceivedRules.next();