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

いいえ、そのようなものはありません。「拡張forループ」は完全に独立した構造であり、パラメーターによって返されるイテレーターをループする以外は何もしませんIterable

あなたができることはこれです:

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
}  

filterメソッドが、条件が成立する要素のみを含むiterableを返す場合。たとえば、Guavaを使用すると、次のようにfilterメソッドを記述できます。

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

for-それぞれに条件を設定することはできません。これは、あなたが求めたものと同等です。

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ます。filterforEach

例えば:

    List<String> collection = Arrays.asList("foo", "bar", "baz");

    collection.stream()
    .filter(e-> !"bar".equals(e))
    .forEach(System.out::println);

あなたが得る:

foo
baz

PSこれはJava8以降で動作します。

于 2022-01-24T13:49:06.323 に答える