Я новичок в Java и у меня проблема с одной задачей.
Я пытаюсь добавить элемент в ArrayList, но есть исключение: Исключение в потоке "main" java.util.ConcurrentModificationException
public Anagrams (String path) throws FileNotFoundException {
List<String> tmpList = new ArrayList<>();
Scanner scan = new Scanner(new File(path));
while(scan.hasNext()) {
tmpList.add(scan.next());
}
scan.close();
tmpList.forEach(word -> {
if (anList.isEmpty()) {
ArrayList<String> tmp1 = new ArrayList<String>();
tmp1.add(word);
anList.add(tmp1);
}
else {
anList.forEach(list -> {
if (isAnagram(word, list.get(0))) {
list.add(word);
} else {
ArrayList<String> tmp2 = new ArrayList<String>();
tmp2.add(word);
anList.add(tmp2);
}
});
}
});
}
Я собираю слова из текстового файла и разделяю их на разные массивы, независимо от того, являются ли они анаграммами или нет. Я знаю, что не могу изменить коллекцию, пока повторяю ее, но я не могу понять, как избежать этого исключения ... Пожалуйста, не могли бы вы мне помочь?




anList.forEach(list -> {
if (isAnagram(word, list.get(0))) {
list.add(word);
} else {
ArrayList<String> tmp2 = new ArrayList<String>();
tmp2.add(word);
anList.add(tmp2); // !!
}
});
Как вы думаете, вызов forEach будет включать элементы, добавленные к anList в строке, которая прокомментировала // !!?
Java не знает, должно это или нет. Так что бросает.
Выясните, как сделать что-то другое: например, добавить в другой список.
Кхм. Это не ошибка компилятора (Java не должна ничего «знать»), это ошибка времени выполнения, вызванная добавлением в повторяемый список.
Я не уверен, что в моем ответе подразумевается ошибка компилятора.
Возможный дубликат Итерации по коллекции, избегая исключения ConcurrentModificationException при удалении в цикле