Java foreach 可以有条件吗?
例如,
for(Foo foo : foos && try == true)
{
//Do something
}
有没有等价的,这样我就可以在里面放一个 AND 条件for
?
不。
您可以改用 while 循环。
Iterator iterator = list.iterator();
while(iterator.hasNext()) {
...
}
不,没有那样的事。Iterable
“增强的 for 循环”是一个完全独立的结构,除了通过其参数返回的迭代器进行 lopp 之外什么都不做。
你可以做的是:
for(Foo foo : foos)
{
//Do something
if(!condition){
break;
}
}
不,foreach专门设计用于迭代数组或集合的所有元素。
如果您愿意,可以检查其中的条件并使用break关键字在中间跳出循环。
您可以获得的最接近的东西可能是过滤初始迭代:
for(Foo foo : filter(foos)) {
//Do something
}
过滤器方法返回一个只包含你的条件成立的那些元素的迭代。例如,使用 Guava,您可以像这样编写过滤器方法:
Iterable<String> filter(Iterable<String> foos) {
return Iterables.filter(foos,
input -> input.equals("whatever");
}
for-each 不能有条件,这相当于你要求的:
Iterator<Foo> iterator = foos.iterator();
while(iterator.hasNext() && condition == true) {
//Do something
}
中Java 8
,你可以做到。例如 :
foos.forEach(foo -> {
if(try) {
--your code--
}
});
您可以使用stream
,filter
和的组合forEach
。
例如:
List<String> collection = Arrays.asList("foo", "bar", "baz");
collection.stream()
.filter(e-> !"bar".equals(e))
.forEach(System.out::println);
你得到:
foo
baz
PS 这将适用于 Java 8 及更高版本。