public void searchOwner(List<Appointments> appts, String owner) {
Appointments theOne = null;
for (Appointments temp : appts) {
if (owner.equalsIgnoreCase(temp.owner.name)) {
System.out.println(temp.data);
temp.setResolved(true);
}
}
}
public void checkRemoval() {
for (Appointments appts : appointments) {
if (appts.resolved == true) {
appointments.remove(appts);
}
//Iterator method used before enhanced for-loop
public void checkRemovalI(){
Iterator<Appointments> it = appointments.iterator();
while(it.hasNext()){
if(it.next().resolved = true){
it.remove();
}
}
}
到目前为止,这是我遇到问题的地方。我试图检查约会的arrayList并查看字段(已解决)是否设置为true,但是在尝试将resolved =设置为true时,我在searchOwner方法期间收到ConcurrentModification异常。我已经尝试在checkRemoval中使用Iterator而不是增强的for循环,但这也没有帮助。我真的只需要将约会设置为true的部分工作,checkRemoval似乎在实现更改布尔值解析之前就已经工作了。非常感谢任何帮助,谢谢。
答案 0 :(得分:1)
我愿意打赌,ConcurrentModificationException
不会在你说的地方引起,而是在checkRemoval()
,你可能在你提到的那一行之前调用resolved
{ {1}}为真,因此你的困惑。
我只是这样说是因为:
for (Appointments appts : appointments) {
if (appts.resolved == true) {
appointments.remove(appts);
}
}
是一种明显的并发修改。 当您在循环中迭代它时,无法从集合中删除元素。相反,您需要使用iterator:
public void checkRemoval() {
Iterator<Appointment> apptsIterator = appointments.iterator();
while (apptsIterator.hasNext()){
if (appts.next().resolved == true)
apptsIterator.remove(); //removes the last element you got via next()
}
答案 1 :(得分:1)
使用for循环抛出ConcurrentModification异常,其中Collection被修改。所以问题不一定是你发布的代码。你可能在appts List上有一个循环,它正在调用这个函数。 发布更多代码可能有所帮助。