Typische Fallstricke
Vermeiden Sie häufige Fehler bei Streams: Wiederverwendung von Streams, versteckte Seiteneffekte sowie parallele Verarbeitung mit veränderlichem Zustand.
Typische Fallstricke ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 3. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 3 Lektionen.
Einführung
Streams sind leistungsfähig, haben aber einige Fallstricke: die Wiederverwendung eines Streams, versteckte Seiteneffekte und die Kombination von Parallelverarbeitung mit veränderlichem Zustand.
Einmal verwendbare Streams
Ein Stream kann nur einmal verwendet werden: Nach einer Terminaloperation (forEach, collect, reduce) kann er nicht erneut verwendet werden.
Code: Fehler bei Wiederverwendung
Nach einer Terminaloperation ist der Stream verbraucht; der Versuch, ihn wiederzuverwenden, löst IllegalStateException aus.
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());
}
}
}
Seiteneffekte
Vermeiden Sie Seiteneffekte innerhalb von map/filter (z. B. das Verändern externer Listen). Bevorzugen Sie reine Funktionen und collect() am Ende.
Code: Seiteneffekte im Vergleich zu collect
Das Verändern des Zustands in der Pipeline ist fehleranfällig. Die Variante mit collect() ist klarer und sicherer.
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: Parallelverarbeitung und veränderlicher Zustand
Parallele Streams und veränderliche Container können Race Conditions verursachen. Bevorzugen Sie collect(), da diese Methode die Nebenläufigkeit handhabt.
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);
}
}
Überprüfung der Fallstricke
Kurze Überprüfung: Was ist ein typischer Stream-Fallstrick für Anfänger?
Zusammenfassung
Zusammenfassung: 1) Streams können nur einmal verwendet werden. 2) Vermeiden Sie Seiteneffekte in Pipelines. 3) Kombinieren Sie parallele Streams nicht mit unsicherem veränderlichem Zustand.
Häufig gestellte Fragen
Ist die Lektion „Typische Fallstricke“ kostenlos?
Ja — der vollständige Text von „Typische Fallstricke“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 3 Lektionen.
Was lerne ich in „Typische Fallstricke“?
Vermeiden Sie häufige Fehler bei Streams: Wiederverwendung von Streams, versteckte Seiteneffekte sowie parallele Verarbeitung mit veränderlichem Zustand. Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Java Academy zu starten?
Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 3.
Wie lange dauert die Lektion „Typische Fallstricke“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?
Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Reihenfolge und Kurzschlussauswertung
- Grundlagen paralleler Streams
- Typische Fallstricke