2013-10-29 39 views
1

我第一次下面的代碼如何解決java.util.NoSuchElementException

與以下錯誤消息

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組樣品= sampleOrderMap.get(it.next()的getId()。)在我的下面代碼

我將如何解決此錯誤消息,並且將這種新方法有我原來的方法相同的功能,沒有工作,我覺得有所有這些循環和條件語句會導致其無法正常工作。

+0

把第一部分放在這裏的含義是什麼,你知道答案嗎? – Sage

+0

想表明我的工作和我所試圖避免 – user2811419

回答

1

在下面的代碼fragement:

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 

您連續呼籲的iterator.next()每次調用,迭代器墊款一個元素通過返回它it.next()。雖然我不知道it.next()將返回什麼對象,但你可以把它分配給集合類型的對象和按如下方式使用它的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()); 
+0

這就是爲什麼我做了我張貼近它的底部把該問題 – user2811419

+0

照顧@ user2811419新的方法,我已經更新了答案。請看一看 – Sage

2

我假設itIterator。 (我這麼說是因爲你沒有發佈重現這個所需的全部源代碼,你應該在將來真正做到這一點)。

所以每次你撥打it.next()你都在推進那個迭代器。您在第一四行調用it.next()三次。因此,如果只有一個留在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. 
}