1

我首先有以下代码

带有以下错误消息

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 循环。

我得到的答案是我在一个循环中添加到订单元素的循环中,这就是导致异常的原因。不要修改您在循环内循环的集合。样品也是如此。

所以我重新做了这个方法,但我收到以下错误消息:

java.util.NoSuchElementException
java.util.NoSuchElementException
    at java.util.ArrayList$Itr.next(ArrayList.java:794)
    at ca.on.oicr.pinery.lims.gsle.GsleClient.getOrders(GsleClient.java:730)

在我的以下代码中,第 730 行是 Set samples = sampleOrderMap.get(it.next().getId())

我将如何修复此错误消息,并且此新方法是否具有与我原来不起作用的原始方法相同的功能,我觉得拥有所有这些循环和条件语句将导致它不起作用。

4

2 回答 2

2

在以下代码片段中:

 while (it.hasNext()) {
 if (sampleOrderMap.containsKey((it.next().getId()))) { // calling it.next()
    if (it.next().getId() != null) { // again calling it.next() ?
       Set<OrderSample> samples = sampleOrderMap.get(it.next().getId()); //again calling 
       for (OrderSample orderSample : samples) {
          Set<Attribute> attributes = attributeOrderMap.get(orderSample.getId());

 ////............ your code

it.next() 在每次调用 时连续调用iterator.next(),迭代器通过返回一个元素前进一个元素。虽然我不确定it.next()返回的是什么对象,但您可以将其分配给集合类型的 Object 并在while循环中使用它,如下所示:

while (it.hasNext()) {
   Order order = (Order)it.next();  // if Order is your list's type
     if (sampleOrderMap.containsKey((order.getId()))) {
        if (order.getId() != null) {
           Set<OrderSample> samples = sampleOrderMap.get(order.getId());
           for (OrderSample orderSample : samples) {
              Set<Attribute> attributes = attributeOrderMap.get(orderSample.getId());
于 2013-10-29T18:30:01.783 回答
2

我假设it是一个Iterator. (我这么说是因为您没有发布重现此内容所需的全部源代码,您将来真的应该这样做。)

因此,每次您调用时,it.next()您都在推进该迭代器。您it.next()在前四行中调用了 3 次。因此,如果 中只剩下一个项目Iterator,则初始调用it.hasNext()将返回 true,但您只能在it.next()项目用完之前再次调用一次。

while (it.hasNext()) {
    OrderSample nextSample = it.next();
    // blah blah blah
    // use nextSample instead of it.next() in each subsequence instance.
}
于 2013-10-29T18:44:17.297 回答