Java 8 ストリーム forEach から中断するか戻るか? 質問する

Java 8 ストリーム forEach から中断するか戻るか? 質問する

外部反復を使用する場合は、次のように拡張 for-each ループの または をIterable使用します。breakreturn

for (SomeObject obj : someObjects) {
   if (some_condition_met) {
      break; // or return obj
   }
}

次のように Java 8 ラムダ式で内部反復を使用するにbreakはどうすればよいでしょうか。return

someObjects.forEach(obj -> {
   //what to do here?
})

ベストアンサー1

これが必要な場合は、 ではforEachなく、ストリームで使用可能な他のメソッドのいずれかを使用する必要があります。どれを使用するかは、目的によって異なります。

たとえば、このループの目的が、ある述語に一致する最初の要素を見つけることだとすると、

Optional<SomeObject> result =
    someObjects.stream().filter(obj -> some_condition_met).findFirst();

(注: ストリームは遅延評価されるため、コレクション全体が反復されるわけではなく、条件に一致する最初のオブジェクトで停止します)。

条件が真となる要素がコレクション内に存在するかどうかだけを知りたい場合は、次のようにしますanyMatch

boolean result = someObjects.stream().anyMatch(obj -> some_condition_met);

おすすめ記事