Java 如何修复ConcurrentModificationException,从arrayList中删除项?

Java 如何修复ConcurrentModificationException,从arrayList中删除项?,java,arraylist,Java,Arraylist,我想在遍历arrayList时从arrayList中删除一个项,arrayList有一个类型类成员。我已经阅读了多个关于如何解决此问题的示例,但是都没有成功,仍然会抛出ConcurrentModificationException Iterator<Members> itr = members.iterator(); while (itr.hasNext()) { Members foundMember = itr.next(); if (foundMember.equals

我想在遍历arrayList时从arrayList中删除一个项,
arrayList
有一个类型类成员。我已经阅读了多个关于如何解决此问题的示例,但是都没有成功,仍然会抛出
ConcurrentModificationException

Iterator<Members> itr = members.iterator();
while (itr.hasNext()) {
  Members foundMember = itr.next();
  if (foundMember.equals(member)){
    itr.remove();
  }
}
Iterator itr=members.Iterator();
while(itr.hasNext()){
Members foundMember=itr.next();
if(foundMember.equals(member)){
itr.remove();
}
}
编辑当然,我的第一个解决方案是facepalm不正确 如上所述,“.removeIf”很可能是最简单的解决方案

只需使用一个“正常”的循环(我认为这应该是可行的,请看一看 ,顺便说一句,“增强for循环”将不起作用

List<Member> list1 = new ArrayList<>();
List<Member> list2 = new ArrayList<>(list1);
for (int i = 0; i < list1.size(); i++) {
  Member member = list1.get(i);
  ...
  list2.remove(member);
}
list1 = list2;
List list1=new ArrayList();
List list2=新的数组列表(list1);
对于(int i=0;i
我最终得到的解决方案是,使用CopyOnWriteArrayList,而不是使用remove()方法的ArrayList nad。

members.removeIf(m->m.equals(member));
将是一种更简单的方法。此代码本身不会抛出CME:这是在迭代时删除成员的正确方法。成员必须在其他地方更新(或此代码从多个线程调用)。您可以发布整个代码吗!!但您将在下一个索引中跳过该成员