java foreach跳过第一次迭代。

有没有一种优雅的方法可以跳过Java5 foreach循环中的第一次迭代? 伪代码示例:
for ( Car car : cars ) {     
   //skip if first, do work for rest
   .
   .
}
已邀请:
我不会称其为优雅,但也许比使用\“ first \”布尔值更好:
for ( Car car : cars.subList( 1, cars.size() ) )
{
   .
   .
}
除此之外,可能没有优雅的方法。
使用新的Java 8 Stream API,它实际上变得非常优雅。只需使用
skip()
方法:
cars.stream().skip(1) // and then operations on remaining cars
使用番石榴
Iterables.skip()
。 就像是:
for ( Car car : Iterables.skip(cars, 1) ) {     
    // 1st element will be skipped
}
(从msandiford的答案结尾处得到此答案,并希望使其成为独立答案)
for (Car car : cars)
{
   if (car == cars[0]) continue;
   ...
}
对我来说足够优雅。
SeanA的代码有一个小错误:子列表的第二个参数被视为互斥索引,因此我们可以编写
for (Car car : cars.subList(1, cars.size()) {
   ...
}
(我似乎无法对答案发表评论,因此无法回答新答案。我是否需要一定的声誉才能做到这一点?)
我有点迟了,但是您可以使用一个辅助方法,例如:
public static <T> Iterable<T> skipFirst(final Iterable<T> c) {
    return new Iterable<T>() {
        @Override public Iterator<T> iterator() {
            Iterator<T> i = c.iterator();
            i.next();
            return i;
        }
    };
}
并使用像这样的东西:
public static void main(String[] args) {
    Collection<Integer> c = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
    for (Integer n : skipFirst(c)) {
        System.out.println(n);
    }
}
对于读者来说,剩下的一般做法是跳过\“ n \” :) 编辑:仔细检查,我发现番石榴在这里有10英镑。
我不是Java语言的人,但您可以使用: 通过Groovy JDK从java.util 11
优雅?并不是的。您需要检查/设置一个布尔值。 for-each循环在所有实际用途中都是使用迭代器的精美语法。在开始循环之前,最好只使用迭代器并前进。
不太优雅,但可以与迭代器一起使用
Iterator<XXXXX> rows = array.iterator();
if (rows.hasNext()){
    rows.next();
}
for (; rows.hasNext();) {
    XXXXX row = (XXXXX) rows.next();
}
这可能并不完美,但是可以在for循环外初始化一个整数变量,并在循环内的每次迭代中将其递增。 仅当计数器大于0时,程序才会执行。
int counter = 0;
for ( Car car : cars ) {
    //skip if first, do work for rest
    if(counter>0){
        //do something
    }
    counter++;
}
您可以使用计数器。尽管还没有那么成熟的编码,但是我仍然找到了跳过列表中第一个元素的最简单方法。
    int ctr=0;
    for(Resource child:children) {
    if(ctr>0) { //this will skip the first element, i.e. when ctr=0
    //do your thing from the 2nd element onwards
    }
    ctr++;
    }

要回复问题请先登录注册