2013-02-04 60 views
2
while(it.hasNext()) 
{ 
    System.out.println("List: " +it.next().getProduct().getName() + " " + product.getName()); 

    if (it.next().getProduct().getName().equals(product.getName())) 
    { 
     System.out.println("asd"); 
    } 
} 

它返回同样的事情:ArrayList的迭代器equals返回java.util.NoSuchElementException

名单:苹果苹果

列表:橙色橙色

但是当我尝试比较他们我得到

列表:橙色橙色

异常在线程 “AWT-EventQueue的 - 0” java.util.NoSuchElementException

,问题是在IF()行..如果我比较没关系他们有或没有getName()(因为他们是相同的对象..)任何想法?

回答

11

您应该在每次迭代中只调用一次next()方法一次。它将光标移动到next()方法的每次调用中的下一个元素。你不想这样做,以确保在每次调用next()之前执行hasNext(),以避免超过最后一个元素。

这将是东西如下

Product p = it.next(); 
//and use p onwards 
0

每个next()调用向前移动迭代器。你在代码中调用它两次。所以要么增加hasnext()的第二个下一个()或删除第二个下一个()的调用

1
Product temp = null; // might break your equals if written badly 
while (it.hasNext()) { 
    // get next product 
    Product product = it.next().getProduct(); // use this when you need to refer to "next" product 

    if (product.equals(temp)) { // compare previous product (temp) with this product 
     // do something 
    } 

    temp = product; // set temp equal to current product, on next iteration it is last 
}