Если вы получаете исключение ConcurrentModificationException, у вас, вероятно, несколько потоков.
Таким образом, полный ответ включает в себя как использование Iterator.remove () , так и для синхронизации доступа к коллекции.
Например (где lock синхронизируется всеми потоками, которые могут изменять список):
synchronized ( lock ) {
List<Apple> apples = appleCart.getApples();
for ( Iterator<Apple> it = apples.iterator(); it.hasNext(); )
{
Apple a = it.next();
if ( a.hasWorm() ) {
it.remove();
}
}
}