Maison >Java >javaDidacticiel >Break or Return of Java 8 Stream Forach?
Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment interrompre ou revenir des opérations forEach
?
Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode forEach
de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux.
Lire plus approfondie: Java Stream API Améliorations
forEach
est une opération terminale qui effectue une opération sur chaque élément du flux. Il est conçu pour gérer chaque élément; break
return
<code class="language-java">List<string> names = Arrays.asList("Alice", "Bob", "Charlie"); names.stream().forEach(name -> { System.out.println(name); });</string></code>imprime chaque nom dans la liste. Mais que se passe-t-il si nous voulons arrêter le traitement quand nous voyons "Bob"?
forEach
Pourquoi ne pouvez-vous pas utiliser Break ou Return?
ou forEach
les instructions ne sont pas autorisées dans les expressions de lambda à l'intérieur. L'instruction break
à l'intérieur de l'expression de lambda ne quittera que l'expression de lambda elle-même et ne quittera pas le continue
ou sa méthode fermée. Essayer d'utiliser return
ou forEach
entraînera une erreur de compilation: break
continue
<code class="language-java">names.stream().forEach(name -> { if (name.equals("Bob")) { break; // 编译错误 } });</code>
for
2.
La méthode
<code class="language-java">for (String name : names) { if (name.equals("Bob")) { break; } System.out.println(name); }</code>signifie que lorsque la condition est remplie, le traitement du flux sera court-circuité.
3.
anyMatch()
Si vous utilisez Java 9 ou version ultérieure, vous pouvez utiliser la méthode
<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>
Techniquement, vous pouvez lancer une exception pour quitter la méthode takeWhile
, mais cela n'est pas recommandé.
<code class="language-java">names.stream() .takeWhile(name -> !name.equals("Bob")) .forEach(System.out::println);</code>
pour contrôler le traitement du flux plus granulaire, mais au prix de l'ajout de complexité. forEach
anyMatch
, noneMatch
, takeWhile
(Java 9) Les méthodes peuvent être plus appropriées. La méthode forEach
dans le flux Java 8 ne permet pas l'utilisation de break
ou return
comme des boucles traditionnelles, mais il existe plusieurs façons de contourner cette limitation. Comprendre ces méthodes vous aidera à choisir la meilleure option en fonction de la situation réelle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!