2013-02-05 4 views
7

私はイテレータを使用しているときに最後の要素を決定する方法は?

for(String s : collectionWithStrings) 
    System.out.println(s + ", "); 

質問のように、イテレータの原則にforループを使用するのが大好き:現在の要素が最後のものであればどのように確認できますか?

int = 0; i < collection.size(); i++などの独自のインデックスを使用すると、これはi == collection.size() - 1で可能ですが、うまくありません。上の例のイテレータで最後の要素を決定することも可能ですか?

+0

番号を使用すると、位置をチェックしたい場合は、他のsyleに切り替えます。 – leonbloy

+0

強化されたforループは、むしろ特殊化されています。その仕事は、非常にシンプルな、しかし頻繁に起こっているいくつかの事例について、非常に短い、簡単な表現を提供することです。あなたが望むものを得ることができない場合は、使用しないでください。 –

答えて

8

実際、Iterator#hasNextメソッドは、イテレータがnextメソッドで別の要素を返すかどうかを判断するブール値を返します。

あなたの反復は、このように置くことができます。

Iterator<String> iterator = collectionWithString.iterator(); 
while(iterator.hasNext()) { 
    String current = iterator.next(); 
    // if you invoke iterator.hasNext() again you can know if there is a next element 
} 
+0

はい、上記の強化されたforループを使ってイテレータにアクセスすることはできません。 –

+0

@DuncanJonesはい、しかしOPはまた、上記の例のイテレータで最後の要素を決定することもできますか?_ – Gamb

+0

申し訳ありません、私の間違いです! –

3

それはあなた自身のカウンタを維持することなくenhanced for loopでは不可能です。正に言えば、これは私が使用するforループのタイプを選択するときの決定要因です。

Iteratorを使用すると、hasNext()メソッドにアクセスでき、最後の要素を処理しているときにfalseが返されます。

+0

ありがとうございます。これも私のループタイプの決定要因でした。それが現実のものとして、私の未来への決定要因になるでしょう。 :) –

5

hasNextメソッドを使用してください。

if(!iterator.hasNext()) { 
    // this is the last element 
} 

通常、我々はようにIteratorを使用して反復:

while(iterator.hasNext()) { 
    Object obj = iterator.next(); 
} 
関連する問題