Java foreach循环:for(Integer i:list){...}

时间:2009-11-30 09:22:40

标签: java iterator foreach

当我使用下面的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) {

到达最后一项

4 个答案:

答案 0 :(得分:36)

一种方法是使用计数器:

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...
    }
}

答案 1 :(得分:9)

有时候使用迭代器会更好。

(据称,豪华for循环中索​​引请求的“85%”用于实现String连接方法(您可以轻松实现)。)

答案 2 :(得分:4)

API不直接支持。您可以使用for(int i ..)循环和 count 元素或使用子列表(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));

仅在不引入冗余时才有用。它比计数版本更好(在子列表开销分摊后)。 (以防你无论如何都要关注拳击)。

答案 3 :(得分:3)

另一种方法是,您可以使用传递对象捕获最后一个值,然后使用它执行某些操作:

List<Integer> list = new ArrayList<Integer>();
Integer lastValue = null;
for (Integer i : list) {
    // do stuff
    lastValue = i;
}
// do stuff with last value