arraylist iterator equals返回java.util.NoSuchElementException

时间:2013-02-04 01:42:04

标签: java exception arraylist iterator

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");
    }
}

它返回完全相同的东西:

  

列表:Apple Apple

     

列表:橙橙

但是当我尝试比较它们时,我得到了

  

列表:橙橙

     

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

问题出现在if()行中。无论是否使用getName()进行比较都没关系(因为它们是相同的对象..)任何想法?

3 个答案:

答案 0 :(得分:12)

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

这将是以下内容

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

答案 1 :(得分: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
}

答案 2 :(得分:0)

每次next()调用都会向前移动迭代器。你在代码中调用它两次。因此,要么在第二个next()前面添加hasnext(),要么删除next()

的第二个调用