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

com*_*tta 19 java foreach iterator

当我使用JDK5时如下

ArrayList<Integer> list = new ArrayList<Integer>();  
     for (Integer i : list) { 

      //cannot check if already reached last item

   }
Run Code Online (Sandbox Code Playgroud)

另一方面,如果我只是使用一个 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()){
          }

    }
Run Code Online (Sandbox Code Playgroud)

如何检查我是否已经使用了最后一项 for (Integer i : list) {

Rom*_*las 36

一种方法是使用计数器:

ArrayList<Integer> list = new ArrayList<Integer>();
...
int size = list.size();
for (Integer i : list) { 
    ...
    if (--size == 0) {
        // Last item.
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑

无论如何,正如Tom Hawtin所说,当你需要获取当前索引信息时,通过使用一个for循环或者iterator,当使用Java5语法时所获得的一切都将在循环中丢失时,有时候使用"旧"语法会更好本身...

for (int i = 0; i < list.size(); i++) {
    ...

    if (i == (list.size() - 1)) {
        // Last item...
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

for (Iterator it = list.iterator(); it.hasNext(); ) {
    ...

    if (!it.hasNext()) {
        // Last item...
    }
}
Run Code Online (Sandbox Code Playgroud)


Tom*_*ine 9

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

(据称,对于posh for循环中的索引的"85%"请求是用于实现String连接方法(您可以轻松地执行此操作).)

  • 或者你可以用apache commons做的StringUtils.join;) (3认同)