我有以下代码:
private void deletePersonFromList(String dni, ObservableList<Persona> persons){
for(Persona p : persons){
if(p.getChildren().isEmpty()) {
if(p.getDNI().equals(dni)) {
persons.remove(p);
}
} else deletePersonFromList(dni, p.getChildren());
}
}
我正在尝试做的是删除列表中的元素(如果它与条件匹配),这是递归完成的,因为所述元素本身可以包含元素列表。
执行此操作会抛出java.util.ConcurrentModificationException,因为正在迭代列表。什么方法可以帮助我做到这一点?
这是我在学校工作时面临的一个问题,所以请不要只用解码它的代码(如果可行)来回答,我想了解在这种情况下我该怎么做以及为什么。
提前致谢!
答案 0 :(得分:3)
您应该使用Iterator
而不是foreach:
public static void main(String[] args) throws Exception {
final List<String> list = new ArrayList<>(of("a", "b", "c"));
final Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
final String value = iterator.next();
iterator.remove();
System.out.println("List: " + list + "\tRemoved: " + value);
}
}
答案 1 :(得分:1)
for (Iterator<Persona> iter = persons.iterator(); iter.hasNext(); ) {
Persona p = iter.next();
if (p.getChildren().isEmpty()) {
if (p.getDNI().equals(dni)) {
iter.remove();
}
} else deletePersonFromList(dni, p.getChildren());
}
通过每个人来维持一个国家。