是否有一种优雅的方法可以跳过Java5 foreach循环中的第一次迭代?
伪代码示例:
for ( Car car : cars ) {
//skip if first, do work for rest
.
.
}
答案 0 :(得分:59)
我不会称之为优雅,但可能比使用“第一个”布尔值更好:
for ( Car car : cars.subList( 1, cars.size() ) )
{
.
.
}
除此之外,可能没有优雅的方法。
答案 1 :(得分:49)
使用新的Java 8 Stream API它实际上变得非常优雅。只需使用skip()
方法:
cars.stream().skip(1) // and then operations on remaining cars
答案 2 :(得分:28)
使用番石榴Iterables.skip()
。
类似的东西:
for ( Car car : Iterables.skip(cars, 1) ) {
// 1st element will be skipped
}
(从msandiford's answer的末尾得到这个,并希望将其作为一个独立的答案)
答案 3 :(得分:25)
for (Car car : cars)
{
if (car == cars[0]) continue;
...
}
对我来说足够优雅。
答案 4 :(得分:18)
SeanA的代码有一个小错误:子列表的第二个参数被视为独占索引,所以我们可以写
for (Car car : cars.subList(1, cars.size()) {
...
}
(我似乎无法评论答案,因此得到了新的答案。我是否需要一定的声誉?)
答案 5 :(得分:6)
我来晚了一点,但你可以使用辅助方法,例如:
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”留给读者练习:)
编辑:仔细观察后,我发现番石榴有Iterables.skip(...)
here。
答案 6 :(得分:4)
答案 7 :(得分:1)
优雅?并不是的。你需要检查/设置一个布尔值。
for-each循环用于所有实际目的,使用迭代器的花哨语法。你最好只使用迭代器并在开始循环之前前进。
答案 8 :(得分:1)
不太优雅,但使用迭代器
Iterator<XXXXX> rows = array.iterator();
if (rows.hasNext()){
rows.next();
}
for (; rows.hasNext();) {
XXXXX row = (XXXXX) rows.next();
}
答案 9 :(得分:1)
这可能不太优雅,但是可以在for循环之外初始化一个整数变量,并在循环内的每次迭代中递增它。 只有当计数器大于0时,您的程序才会执行。
int counter = 0;
for ( Car car : cars ) {
//skip if first, do work for rest
if(counter>0){
//do something
}
counter++;
}
答案 10 :(得分:0)
您可以使用计数器。尽管还没有那么成熟的编码,但我仍然发现它是跳过列表中第一个元素的最简单方法。
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++;
}