У меня в настоящее время есть проблема с итерацией через ArrayList. Я прочитал несколько сообщений здесь, но ничто, похоже, не разрешило мою проблему. Вот мой код:ConcurrentModificationException при повторении через Arraylist (не удаляется)
//restaurants contains a list of all restaurants and i want to filter them
List<Restaurant> newList = new ArrayList<Restaurant>();
List<Restaurant> allRestaurants = new ArrayList<Restaurant>(restaurants);
if (query != null && query.length() > 0 && !query.equals("*")) {
synchronized (allRestaurants) {
for (Iterator<Restaurant> it = allRestaurants.iterator(); it
.hasNext();) {
Restaurant restaurant = it.next();
if (restaurant.getCity().contains(query)) {
synchronized (newList) {
newList.add(restaurant);
}
} else {
newList = allRestaurants;
}
}
}
Это код был изменен мной с несколькими идеями я читал здесь (синхронизированных с использованием итератора вместо для-каждой петли). Я даже синхронизировал весь метод и все еще получаю исключение.
Исключение происходит в следующей строке:
Restaurant restaurant = it.next();
, которые я не понимаю. Я не манипулирую списком в этой строке. Почему это происходит и как я могу это исправить?
Вы, вероятно, не хотите иметь вложенный синхронизированный блок –