gpt4 book ai didi

修改列表时出现java.util.ConcurrentModificationException

转载 作者:行者123 更新时间:2023-12-01 08:07:27 24 4
gpt4 key购买 nike

我正在尝试使用 App Engine 和 objectify 删除数据库中的一些文件。这是我有异常(exception)的代码:

for(SottoCategoria sc: lsc){
List<Key<Dispensa>> ld2=sc.getDispense();
if(ld2!=null){
for(Key<Dispensa> kd : ld2){ // <---- Exception!!
if(kd.equals(k)){
sc.removeDispensa(k);
ofy().save().entity(sc).now();
break;
}
}
}
}

这是从列表中删除的方法:

public void removeDispensa(Key<Dispensa> k ){
Iterator<Key<Dispensa>> kIter = dispense.iterator();
while(kIter.hasNext()) {
Key<Dispensa> kk = kIter.next();
System.out.println(kk.equals(k));
if(kk.equals(k)){
kIter.remove();
break;
}
}

}

如何解决?谢谢!

编辑:

我决定在循环中插入一个简单的中断,因为在 Sottocategoria 中只能有一个我想删除的分配!

最佳答案

发生 ConcurrentModificationException 是因为您在迭代列表时尝试删除列表的一部分。尝试使用带索引的 for 循环或创建迭代器。

for 循环示例:

    for(int i = 0; i<dispense.size();i++) {
System.out.println(dispense.get(i).equals(k));
if(dispense.get(i).equals(k)){
dispense.remove(i);
break;
}
}

示例迭代器:

    Iterator<Key<Dispensa>> It = dispense.iterator();
while(It.hasNext()) {
Key<Dispensa> kk = It.next();
System.out.println(kk.equals(k));
if(kk.equals(k)){
dispense.remove(kk);
break;
}
}

关于修改列表时出现java.util.ConcurrentModificationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20402778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com