← Каталог
Рекомендации по разработке на Java — 7.3. Избегание модификации коллекций во время итерации
Фрагмент из «Рекомендации по разработке на Java»: 7.3. Избегание модификации коллекций во время итерации.
// Плохо: ConcurrentModificationException
for (User user : users) {
if (!user.isActive()) {
users.remove(user); // ошибка во время выполнения
}
}
// Хорошо: использование итератора
Iterator<User> iterator = users.iterator();
while (iterator.hasNext()) {
User user = iterator.next();
if (!user.isActive()) {
iterator.remove();
}
}
// Альтернатива: создание новой коллекции
List<User> activeUsers = users.stream()
.filter(User::isActive)
.collect(Collectors.toList()); // Плохо: ConcurrentModificationException
for (User user : users) {
if (!user.isActive()) {
users.remove(user); // ошибка во время выполнения
}
}
// Хорошо: использование итератора
Iterator<User> iterator = users.iterator();
while (iterator.hasNext()) {
User user = iterator.next();
if (!user.isActive()) {
iterator.remove();
}
}
// Альтернатива: создание новой коллекции
List<User> activeUsers = users.stream()
.filter(User::isActive)
.collect(Collectors.toList());