2012-02-21 12 views
3

シーケンスからいくつかの値を取得していますが、同じシーケンスからの別々の値セットに対して2回行う必要があります。私がどちらか一方を呼び出すと、すべてが正しく返されますが、next()を2回呼び出すとNoSuchElementExceptionとなります。このオンラインについて読んだ後、私はnext()を一度呼び出した後にそれを集めました。それを呼び出した後の他の時間は、基本的に反復子falseを返します。あなたは同じものから2つの別々のデータセットをどうやって得ますかCollectionIteratorでnext()を2回呼び出すとNoSuchElementExceptionがスローされます

while (ai.hasNext()) { 
    String ao = ai.next().getImageURL(ImageSize.MEGA); 
    String an= ai.next().getName(); 
} 
+0

同じデータ上の2回の別個の反復子を作成します。 –

答えて

6

一時変数としてnext()を格納できます。次のコードのオブジェクトを、反復処理中のデータ型に置き換えます。

while(ai.hasNext()){ 
    Object temp = ai.next(); 
    String ao = temp.getImageUrl(ImageSize.MEGA); 
    String an = temp.getName(); 

}

+0

これは完璧に動作します。グラシアス。 – adneal

2

あなたのリストには、偶数個の要素を持っているかわからない場合、あなただけのnext()への2回目の自分の呼び出しの前にif (ai.hasNext())を追加する必要があります。

while (ai.hasNext()) { 
    String ao = ai.next().getImageURL(ImageSize.MEGA); 
    if (ai.hasNext())) { 
     String an= ai.next().getName(); 
     ... 
    } 
} 
+1

あなたのリストに偶数の要素があるかどうか*確かでない場合は、それを行う必要があります。 – Thilo

+0

ありがとう、私はそれを修正しました。 –

0

あなたのコレクションが要素の不均一な数を持っているとき、あなたは何かがそこにあるチェックせずに二回next()を呼び出すべきではありません。このエラーに遭遇します。あなたは本質的にそれを行うことによってwhile loopのポイントを破っています。

next()取得するコレクションに何かがある限り、動作します。これは、あなたがあなたが説明したようNoSuchElementExceptionになってしまいますCollectionに別のStringを追加した場合JDK1.6.0_23

Collection<String> aCollection = new ArrayList<String>(); 

    aCollection.add("1"); 
    aCollection.add("2"); 

    Iterator<String> i = aCollection.iterator(); 

    String firstString = null; 
    String secondString = null; 

    while (i.hasNext()) { 
     firstString = (String) i.next(); 
     secondString = (String) i.next(); 
    } 

    System.out.println(firstString); 
    System.out.println(secondString); 

に完全に正常に動作するコード例です。同じデータに対して2つの別々のイテレーターが必要な場合や、whileループ内に別のチェックを入れて、コレクション内にまだ何か残っているかどうかを確認してから取り出してください。