带有条件的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-- } });