以下のようにJDK5を使用する場合
_ArrayList<Integer> list = new ArrayList<Integer>();
for (Integer i : list) {
//cannot check if already reached last item
}
_
一方、Iterator
を使用する場合
_ArrayList<Integer> list = new ArrayList<Integer>();
for (Iterator i = list.iterator(); i.hasNext();) {
//i can check whether this is last item
if(i.hasNextItem()){
}
}
_
for (Integer i : list) {
で最後のアイテムに既に到達しているかどうかを確認するにはどうすればよいですか
それを行う1つの方法は、カウンターを使用することです。
ArrayList<Integer> list = new ArrayList<Integer>();
...
int size = list.size();
for (Integer i : list) {
...
if (--size == 0) {
// Last item.
...
}
}
編集
とにかく、Tom Hawtinが言ったように、for
ループまたはiterator
を使用して、現在のインデックス情報を取得する必要がある場合、「古い」構文を使用する方がよい場合があります。 Java5構文を使用すると、ループ自体で失われます...
for (int i = 0; i < list.size(); i++) {
...
if (i == (list.size() - 1)) {
// Last item...
}
}
または
for (Iterator it = list.iterator(); it.hasNext(); ) {
...
if (!it.hasNext()) {
// Last item...
}
}
場合によっては、イテレーターを使用した方が良い場合があります。
(申し立てによると、posh forループ内のインデックスのリクエストの「85%」は、String
joinメソッドを実装するためのものです(これは簡単に行うことができます)。
APIはそれを直接サポートしていません。 for(int i ..)ループとcountを使用するか、subLists(0、size-1)を使用して最後の要素を明示的に処理できます。
if(x.isEmpty()) return;
int last = x.size() - 1;
for(Integer i : x.subList(0, last)) out.println(i);
out.println("last " + x.get(last));
これは、冗長性を導入しない場合にのみ役立ちます。 パフォーマンスが良いカウントバージョンよりも(subListオーバーヘッドが償却された後)。 (とにかくボクシングを気にかけた場合に備えて)。
別の方法として、パススルーオブジェクトを使用して最後の値をキャプチャし、それで何かを行うことができます。
List<Integer> list = new ArrayList<Integer>();
Integer lastValue = null;
for (Integer i : list) {
// do stuff
lastValue = i;
}
// do stuff with last value