Java foreachに条件を設定することは可能ですか?
例えば、
for(Foo foo : foos && try == true)
{
//Do something
}
AND条件を内部に入れることができるように、これに相当するものはありfor
ますか?
いいえ。
代わりにwhileループを使用できます。
Iterator iterator = list.iterator();
while(iterator.hasNext()) {
...
}
いいえ、そのようなものはありません。「拡張forループ」は完全に独立した構造であり、パラメーターによって返されるイテレーターをループする以外は何もしませんIterable
。
あなたができることはこれです:
for(Foo foo : foos)
{
//Do something
if(!condition){
break;
}
}
いいえ、foreachは、配列またはコレクションのすべての要素を反復処理するためだけに特別に設計されています。
必要に応じて、内部の状態を確認し、breakキーワードを使用して途中でループから抜け出すことができます。
あなたが得ることができる最も近いものはおそらく最初の反復可能物をフィルタリングすることです:
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");
}
for-それぞれに条件を設定することはできません。これは、あなたが求めたものと同等です。
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これはJava8以降で動作します。