我正在使用spring boot作为后端开发一个应用程序。在循环并更新数组列表中对象的值时抛出以下错误,
java.util.ConcurrentModificationException: null
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:911) ~[na:1.8.0_292]
at java.util.ArrayList$Itr.next(ArrayList.java:861) ~[na:1.8.0_292]
at org.hibernate.collection.internal.AbstractPersistentCollection$IteratorProxy.next(AbstractPersistentCollection.java:883) ~[hibernate-core-5.4.12.Final.jar!/:5.4.12.Final]
我改变了循环,如下所示,
for(Object obj : myObjectList) {
obj.setEndDate(someDate);
obj.isActive(false);
objectRepository.save(obj);
}
和
Iterator<Object> objIterator = myObjectList.iterator();
while(objIterator.hasNext()) {
Object obj = objIterator.next();
obj.setEndDate(someDate);
obj.isActive(false);
objectRepository.save(obj);
}
两者都抛出了相同的错误。
将日志打印到这些for循环中时。它将第一次打印日志,并在第二次迭代时抛出错误。
3条答案
按热度按时间dddzy1tm1#
如果您想在对列表进行迭代时修改列表,那么切换到使用迭代器是正确的选择,但是您需要一个while循环而不是for循环:
x4shl7ld2#
您可以通过如下方式创建新的arraylist Package 器来使用故障安全交互:
这会解决你的问题
l2osamch3#
作为对其他答案的补充,您可以先修改集合,然后保存它。