26

Java foreach 可以有条件吗?

例如,

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

有没有等价的,这样我就可以在里面放一个 AND 条件for

4

7 回答 7

21

不。

您可以改用 while 循环。

Iterator iterator = list.iterator();
while(iterator.hasNext()) {
    ...
}
于 2012-04-11T10:54:33.767 回答
13

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

你可以做的是:

for(Foo foo : foos)
{
   //Do something
   if(!condition){
       break;
   }
}
于 2012-04-11T10:55:49.647 回答
8

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

如果您愿意,可以检查其中的条件并使用break关键字在中间跳出循环。

于 2012-04-11T10:55:13.963 回答
2

您可以获得的最接近的东西可能是过滤初始迭代:

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

过滤器方法返回一个只包含你的条件成立的那些元素的迭代。例如,使用 Guava,您可以像这样编写过滤器方法:

Iterable<String> filter(Iterable<String> foos) {
    return Iterables.filter(foos, 
            input -> input.equals("whatever");
}
于 2017-11-03T09:01:59.033 回答
2

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

Iterator<Foo> iterator = foos.iterator();
while(iterator.hasNext() &&  condition == true) {
    //Do something
}
于 2017-12-01T17:07:14.667 回答
1

Java 8,你可以做到。例如 :

foos.forEach(foo -> {
        if(try) {
          --your code--
        }
    });
于 2016-09-26T04:52:05.813 回答
0

您可以使用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 及更高版本。

于 2022-01-24T13:49:06.323 回答