我的代码导致 java.util.ConcurrentModificationException 错误。这是以下代码。
这是确切的错误:
java.util.ConcurrentModificationException
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:894)
at java.util.HashMap$KeyIterator.next(HashMap.java:928)
at ca.on.oicr.pinery.lims.gsle.GsleClient.getOrders(GsleClient.java:720)
第 720 行是第二个 for 循环
我之前发布了这个问题,并被告知“您在循环中添加订单元素,这就是导致异常的原因。不要修改您在循环内循环的集合。同样地样品”。我了解我要重新构建此方法并收到以下建议。
ListIterator<Order> it = orders.listIterator();
while ( it.hasNext() ) {
Order ord = it.next();
if ( ) // some condition
it.remove(); // This wil remove the element that we just got using the next() method
if ( ) // some other condition
it.add(new Order()); // THis inserts the element immediately before the next call to next()
}
现在我被困在如何在使用迭代方法时添加样本和顺序,因为你会通过一个集合进行不同的迭代,我假设我会使用 for 循环。
这是我对如何更改以不获取 java.util.ConcurrentModificationException 感到困惑的部分。
f
到目前为止,我已经到了这里。
java.util.ListIterator<Order> it = orders.listIterator();
while (it.hasNext()) {
it.next().getId();
if (sampleOrderMap.containsKey((it.next().getId())))
{
Set<OrderSample> samples = sampleOrderMap.get(it.next().getId());
}
}`
我只是不知道如何以不会得到 ConcurrentModificationException 的方式放入其余部分