Maison >Java >javaDidacticiel >Break or Return of Java 8 Stream Forach?

Break or Return of Java 8 Stream Forach?

Barbara Streisand
Barbara Streisandoriginal
2025-02-07 12:09:11870parcourir

Break or return from Java 8 stream forEach?

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

Comprendre le flux foreach

La méthode

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

Dans l'exemple ci-dessus,
<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?

n'utilise pas les structures de boucle traditionnelles, donc

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

Méthode alternative
<code class="language-java">names.stream().forEach(name -> {
    if (name.equals("Bob")) {
        break; // 编译错误
    }
});</code>

1.

Si une boucle est nécessaire pour interrompre, la boucle classique

est une option efficace et souvent la meilleure.

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

pour traiter les éléments jusqu'à ce qu'une certaine condition soit remplie.
<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.

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>

5.

Utilisez Custom

pour contrôler le traitement du flux plus granulaire, mais au prix de l'ajout de complexité. forEach

Sélectionnez la bonne méthode

  • Simplicité: Si vous devez quitter tôt, la méthode du cycle traditionnel est plus simple.
  • Style fonctionnel: Si vous ne voulez pas s'écarter du paradigme de programmation fonctionnelle, anyMatch, noneMatch, takeWhile (Java 9) Les méthodes peuvent être plus appropriées.
  • Performance: Surtout lorsque vous travaillez avec de grands ensembles de données, l'impact des performances de chaque méthode doit être pris en compte.

Conclusion

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:Classe de béton en javaArticle suivant:Classe de béton en java