[英]how to resolve 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行是以下代碼中的Set samples = sampleOrderMap.get(it.next()。getId())
我將如何修復此錯誤消息,並且此新方法將具有與原始方法相同的功能,但是我覺得擁有所有這些循環和條件語句將導致它無法正常工作。
我假設it
是一個Iterator
。 (我這樣說是因為你沒有發布重現這個的所有源代碼,你將來應該這樣做。)
因此,每次調用it.next()
您都在推進迭代器。 你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.
}
在以下代碼中:
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()
, 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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.