带有条件的Java Foreach

Java foreach有可能有条件吗?

例如,

for(Foo foo : foos && try == true) { //Do something } 

有没有相当于这个,这样我可以把一个AND条件放在里面?

没有。

你可以改用while循环。

 Iterator iterator = list.iterator(); while(iterator.hasNext()) { ... } 

不,没有那样的。 “增强的for循环”是一个完全独立的结构,除了lopp通过其Iterable参数返回的迭代器之外什么都不做。

你能做的是:

 for(Foo foo : foos) { //Do something if(!condition){ break; } } 

不, foreach专门设计用于迭代数组或集合的所有元素。

如果你想要,你可以检查里面的条件,并使用break关键字在中间退出循环。

你可以得到的最接近的东西可能是过滤最初的可迭代:

 for(Foo foo : filter(foos)) { //Do something } 

filter方法返回一个iterable,其中只包含条件所适用的元素。 例如,使用Guava,您可以像这样编写filter方法:

 Iterable filter(Iterable foos) { return Iterables.filter(foos, input -> input.equals("whatever"); } 

for-each不能有条件,这里相当于你要求的:

 Iterator iterator = foos.iterator(); while(iterator.hasNext() && condition == true) { //Do something } 

Java 8 ,您可以这样做。 例如 :

 foos.forEach(foo -> { if(try) { --your code-- } });