通过Java中的for-each循环检测第一次迭代

use*_*724 24 java foreach

我正在使用一个服务器,它将字符分隔列表返回给它的客户端.为了构建这些列表,我必须通过for-each循环检测第一次迭代:

    StringBuilder builder = new StringBuilder() ;
    boolean firstIterationFlag = true ;

    for ( String s : list ){
        if ( firstIterationFlag) {
            firstIterationFlag = false ;
        } else {
            builder.append(separator);
        }
        builder.append(s) ;         
   }
   return builder.toString() ;
Run Code Online (Sandbox Code Playgroud)

没有旗帜,有没有办法做到这一点?

Jon*_*eet 20

对于这种情况,一种更简单的方法是注意你总是可以附加一个空字符串:

// For the first iteration, use a no-op separator
String currentSeparator = "";
for (String s : list) {
    builder.append(currentSeparator);
    builder.append(s);
    // From the second iteration onwards, use this
    currentSeparator = separator;
}
Run Code Online (Sandbox Code Playgroud)

或者(并且最好)使用Guava的Joiner类开始:)

这个"木匠"场景几乎总是给出了这个要求 - 所以只需使用Joiner.对于其他方案,请使用常规for循环或根据您的代码使用条件.


Sea*_*oyd 7

不使用foreach,而是手动使用迭代器:

Iterator<String> it = list.iterator();
if(it.hasNext()){
    doSomeThingForTheFirstTime(it.next());
    while(it.hasNext()){
        doSomethingElse(it.next);
    }
}
Run Code Online (Sandbox Code Playgroud)

(顺便说一句,这几乎是Guava的Joiner课程在内部所做的,尽管在更高的层次上)