java for 跳过_java foreach跳过第一次迭代

java foreach跳过第一次迭代

有没有一种优雅的方法可以跳过Java5 foreach循环中的第一次迭代?

伪代码示例:

for ( Car car : cars ) {

//skip if first, do work for rest

.

.

}

11个解决方案

62 votes

我不会称其为优雅,但可能比使用“第一个”布尔值更好:

for ( Car car : cars.subList( 1, cars.size() ) )

{

.

.

}

除此之外,可能没有优雅的方法。

Sean Adkinson answered 2020-01-07T02:35:04Z

54 votes

使用新的Java 8 Stream API,它实际上变得非常优雅。 只需使用skip()方法:

cars.stream().skip(1) // and then operations on remaining cars

Kao answered 2020-01-07T02:35:24Z

28 votes

使用番石榴Iterables.skip()。

就像是:

for ( Car car : Iterables.skip(cars, 1) ) {

// 1st element will be skipped

}

(从msandiford的答案结尾处得到此信息,并希望使其成为独立的答案)

yop83 answered 2020-01-07T02:35:52Z

26 votes

for (Car car : cars)

{

if (car == cars[0]) continue;

...

}

对我来说足够优雅。

elekwent answered 2020-01-07T02:36:12Z

18 votes

SeanA的代码有一个小错误:子列表的第二个参数被视为互斥索引,因此我们可以编写

for (Car car : cars.subList(1, cars.size()) {

...

}

(我似乎无法评论答案,因此无法评论新答案。我需要一定的声誉才能做到这一点吗?)

Daniel Lubarov answered 2020-01-07T02:36:37Z

6 votes

我有点迟了,但是您可以使用一个辅助方法,例如:

public static Iterable skipFirst(final Iterable c) {

return new Iterable() {

@Override public Iterator iterator() {

Iterator i = c.iterator();

i.next();

return i;

}

};

}

并使用像这样的东西:

public static void main(String[] args) {

Collection c = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);

for (Integer n : skipFirst(c)) {

System.out.println(n);

}

}

对于读者来说,剩下的一般做法是跳过“ n” :)

编辑:仔细检查,我发现番石榴在这里有Iterables.skip(...)。

msandiford answered 2020-01-07T02:37:10Z

4 votes

我不是Java语言的人,但您可以使用:

通过Groovy JDK从java.util获得for ( Car car : cars.tail() )

Preet Sangha answered 2020-01-07T02:37:34Z

1 votes

优雅? 并不是的。 您需要检查/设置一个布尔值。

for-each循环在所有实际用途中都是使用迭代器的精美语法。 在开始循环之前,最好只使用迭代器并前进。

Brian Roach answered 2020-01-07T02:37:58Z

1 votes

不太优雅,但可以与迭代器一起使用

Iterator rows = array.iterator();

if (rows.hasNext()){

rows.next();

}

for (; rows.hasNext();) {

XXXXX row = (XXXXX) rows.next();

}

Angel answered 2020-01-07T02:38:18Z

1 votes

这可能并不完美,但是可以在for循环外初始化一个整数变量,并在循环内的每次迭代中将其递增。仅当计数器大于0时,程序才会执行。

int counter = 0;

for ( Car car : cars ) {

//skip if first, do work for rest

if(counter>0){

//do something

}

counter++;

}

Benjamin answered 2020-01-07T02:38:38Z

0 votes

您可以使用计数器。 尽管还没有那么成熟的编码,但我仍然找到跳过列表中第一个元素的最简单方法。

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++;

}

Sonakshi Sharma answered 2020-01-07T02:38:58Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值