2017-05-18 18 views
-1

私はCollection<RECOBeacon> recoBeaconsのコレクションを持っています。最初の要素はRECOBeacon first = recoBeacons.iterator().next();で取得されていますが、2番目の要素を取得するのに問題があります。私はRECOBeacon second = first.next();second = first.iterator().next()を試しましたが、これらのどれもうまくいきませんでした。誰もこの問題を解決する方法を知っていますか? ありがとう! Collectionが未満を持っているときに例外を避けるために、iter.next()に各呼び出しの前にiter.hasNext()を呼び出す方が良いでしょうコレクションの2番目の要素を取得する方法は?

Iterator<RECOBeacon> iter = recoBeacons.iterator(); 
RECOBeacon first = iter.next(); 
RECOBeacon second = iter.next() 

+1

イテレータインスタンス 'recoBeacons.iterator()'をどこかに保存し、**その上に 'next()'をもう一度呼び出す必要があります。 – QBrute

答えて

3

あなたは第一及び第二の要素の両方を取得するために同じイテレータを使用する必要があります。 2つの要素。

0

@ Eranの回答に加えて、通常はコレクション全体を反復するのにIteratorを使用します。あなたの場合、第3、第4要素を取得したい場合、あなたはどうしますか?次に、イテレータでループを使用できます。ここで

Iterator<RECOBeacon> iter = recoBeacons.iterator(); 
while(iter.hasNext()) { 
    RECOBeacon nextBeacon = iter.next(); 
    // do something with nextBeacon 
} 

hasNext()NoSuchElementExceptionに実行してから、あなたのイテレータを防止し、それはあなたのコレクションの末尾に達したときにループから抜け出すになります。

3

あなたはJava8にしている場合は、ストリームを使用することができます。

RECOBeacon second = recoBeacons.stream().skip(1).findFirst().orElse(null); 

このソリューションのいいところは、あなたが使用しているときのようなのhasNextチェックを行う必要はありませんので、FindFirstのは、オプションを返すことですイテレータ。

また、コレクションインターフェイスでは順序が保証されないため、n番目の要素を取得すると予期しない結果が生じることがあります。

+0

これは受け入れられる回答である必要があります! –

関連する問題