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

它返回完全相同的东西:

列表:苹果苹果

清单:橙橙

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

清单:橙橙

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

问题出在 if () 行中。我是否将它们与 getName() 进行比较都没关系(因为它们是相同的对象。)有什么想法吗?

4

3 回答 3

13

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

如下所示

Product p = it.next();
//and use p onwards
于 2013-02-04T01:45:22.610 回答
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
}
于 2013-02-04T02:28:44.347 回答
0

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

于 2013-02-04T01:47:21.517 回答