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()各反復でメソッドを 1 回だけ呼び出す必要があります。メソッドが呼び出されるたびに、カーソルを次の要素に移動します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() 呼び出しは、反復子を前方に移動します。コード内で 2 回呼び出します。したがって、2 番目の next() の前に hasext() を追加するか、next() の 2 番目の呼び出しを削除します。

于 2013-02-04T01:47:21.517 に答える