ホームページ >Java >&#&チュートリアル >Java 8 Stream Foreachから休憩または戻ってきますか?
Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は、forEach
操作から中断または戻る方法です。
従来のループにより、早期中断や戻りが可能になりますが、StreamのforEach
メソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。
さらなる読み取り:JavaストリームAPIの改善
forEach
メソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。各要素を処理するように設計されています。 break
return
上記の例では、リスト内の各名前を印刷します。しかし、「ボブ」が表示されたときに処理を停止したい場合はどうでしょうか?
<code class="language-java">List<string> names = Arrays.asList("Alice", "Bob", "Charlie"); names.stream().forEach(name -> { System.out.println(name); });</string></code>なぜ休憩や戻ってくることができないのですか?
forEach
ステートメントは、Lambda式自体のみを終了し、forEach
またはその囲まれた方法を終了しません。 break
またはcontinue
を使用しようとすると、コンパイルエラーが発生します。
return
forEach
代替方法break
continue
1を使用してください
<code class="language-java">names.stream().forEach(name -> { if (name.equals("Bob")) { break; // 编译错误 } });</code>ループが中断するために必要な場合、クラシック
for
メソッドは、条件が満たされると、ストリーム処理が短絡することを意味します。
<code class="language-java">for (String name : names) { if (name.equals("Bob")) { break; } System.out.println(name); }</code>
メソッドを使用して、特定の条件が満たされるまで要素を処理できます。 anyMatch()
<code class="language-java">boolean found = names.stream().anyMatch(name -> { if (name.equals("Bob")) { // 执行操作 System.out.println("找到Bob"); return true; // 这将使Stream短路 } System.out.println(name); return false; });</code>4を使用します(推奨されません)
メソッドを終了できますが、これは推奨されません。 takeWhile
<code class="language-java">names.stream() .takeWhile(name -> !name.equals("Bob")) .forEach(System.out::println);</code>5カスタムスプレタ
anyMatch
、noneMatch
、takeWhile
(Java 9)メソッドがより適切かもしれません。 またはforEach
以上がJava 8 Stream Foreachから休憩または戻ってきますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。