Рассмотрим следующий код.
Как и следовало ожидать, метод deleteFruitByName генерирует исключение ConcurrentModificationException, когда фрукт удаляется внутри для каждого l oop.
Как мне избежать этого в таких случаях?
import java.util.ArrayList;
public class Stringplay {
public static void main(String[] args) {
ArrayList<Fruit> fruites = new ArrayList<Fruit>();
new Fruit(32, "apple", "red");
new Fruit(64, "orange", "orange");
new Fruit(12, "banana", "red");
new Fruit(42, "grape", "purple");
fruites.addAll(Fruit.fruits);
Fruit.deleteFruitByName("apple");
for (Fruit fruit : fruites) {
System.out.println(fruit.getName());
}
}
}
public class Fruit {
public int weight;
public String name;
public String type;
public static ArrayList<Fruit> fruits = new ArrayList<Fruit>();
public Fruit(int weight, String name, String type) {
this.weight = weight;
this.name = name;
this.type = type;
fruits.add(this);
}
public String getName() {
return name;
}
public static void deleteFruitByName(String fruitName) {
for (Fruit fruit : fruits) {
if (fruit.getName().equals(fruitName)) {
fruits.remove(fruit);
}
}
}
}