Java Academy · Leçon

Pièges courants

Évitez les erreurs fréquentes avec les Streams : réutilisation des flux, effets de bord cachés et état mutable associé au parallélisme.

Leçon 3 sur 38 étapes

Pièges courants est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 3. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 3 leçons au total.

Introduction

Les flux sont puissants, mais présentent des pièges : réutiliser un flux, provoquer des effets secondaires dissimulés et mélanger le parallélisme avec un état modifiable.

Flux à usage unique

Un flux ne peut être utilisé qu’une seule fois : après une opération terminale (forEach, collect, reduce), il ne peut plus être réutilisé.

Code : erreur de réutilisation

Après une opération terminale, le flux est consommé ; tenter de le réutiliser déclenche IllegalStateException.

import java.util.*;import java.util.stream.*;public class Main {
  public static void main(String[] args) {
    List<Integer> nums = Arrays.asList(1, 2, 3);
    Stream<Integer> s = nums.stream();
    s.forEach(System.out::println); // terminal
    try {
      s.forEach(System.out::println); // reuse -> IllegalStateException
    } catch (IllegalStateException e) {
      System.out.println("Oops: " + e.getMessage());
    }
  }
}

Effets secondaires

Évitez les effets secondaires dans map/filter, comme la modification de listes externes. Préférez les fonctions pures et collect() à la fin.

Code : effets secondaires ou collect

Modifier l’état dans la chaîne de traitement est fragile. La version avec collect() est plus claire et plus sûre.

import java.util.*;import java.util.stream.*;public class Main {
  public static void main(String[] args) {
    List<Integer> nums = Arrays.asList(1,2,3);
    // Pitfall: mutating external list from map/forEach
    List<Integer> out = new ArrayList<>();
    nums.stream().map(n -> { out.add(n*n); return n*n; }).forEach(x -> {});
    System.out.println("With side effects: " + out);

    // Better: use collect to build the result
    List<Integer> squares = nums.stream().map(n -> n*n).collect(Collectors.toList());
    System.out.println("With collect: " + squares);
  }
}

Code : parallèle et état modifiable

Les flux parallèles associés à des conteneurs modifiables peuvent provoquer des conditions de concurrence. Préférez collect(), qui gère la concurrence.

import java.util.*;public class Main {
  public static void main(String[] args) {
    List<Integer> nums = java.util.Arrays.asList(1,2,3,4,5);
    // Pitfall: adding to a normal ArrayList from parallel pipeline (unsafe)
    List<Integer> unsafe = new ArrayList<>();
    nums.parallelStream().forEach(n -> unsafe.add(n)); // may be unsafe
    System.out.println("Parallel add to ArrayList (unsafe demo): " + unsafe);

    // Safer: use built-in collectors
    List<Integer> safe = nums.parallelStream().map(n -> n).collect(java.util.stream.Collectors.toList());
    System.out.println("Collected safely: " + safe);
  }
}

Vérification des pièges

Vérification rapide : Quel est un piège courant des flux pour les débutants ?

Récapitulatif

Récapitulatif : 1) Les flux ne peuvent être utilisés qu’une seule fois. 2) Évitez les effets secondaires dans les chaînes de traitement. 3) Ne mélangez pas les flux parallèles avec un état modifiable non sécurisé.

Gratuit pour commencer

Apprends Java avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
104
Leçons
374

Questions Fréquemment Posées

La leçon « Pièges courants » est-elle gratuite ?

Oui — le texte complet de « Pièges courants » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 3 leçons au total.

Qu'est-ce que j'apprendrai dans « Pièges courants » ?

Évitez les erreurs fréquentes avec les Streams : réutilisation des flux, effets de bord cachés et état mutable associé au parallélisme. Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Java Academy ?

Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 3.

Combien de temps prend la leçon « Pièges courants » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?

Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Ordre et évaluation en court-circuit
  2. Bases des flux parallèles
  3. Pièges courants
← Retour à Java Academy