Was ihr in dieser Schulung lernt
💡 Neu bei Java Streams? → Java Streams Basics Schulung
✅ Streams bereits bekannt, bereit für mehr? → Ihr seid hier richtig.
In diesem zweitägigen Aufbaukurs lernt ihr, wie ihr die Java Stream API in der Tiefe versteht und fortgeschrittene Techniken wie Custom Collectors, Gatherers und Spliterators gezielt einsetzt.
Am ersten Tag stehen fortgeschrittene Collectors und Aggregationstechniken im Fokus. Ihr lernt, wie ihr mit groupingBy() Daten flexibel gruppiert, Downstream Collectors kombiniert und reduce() für anspruchsvolle Aggregationen einsetzt – und entwickelt anschließend eigene Collector-Implementierungen für eure konkreten Anforderungen. Dabei bekommt ihr ein Gespür dafür, wann und wie Parallelisierung sinnvoll ist – und welche Fallstricke ihr besser vermeidet.
Am zweiten Tag tauchen wir ein in die Welt der Spliterators und der Gatherers-API – seit Java 24 fester Bestandteil der Stream API. Ihr erfahrt, wie ihr mit Custom Spliterators große Datenmengen effizient aufteilt und Streams präzise steuert. Mit Stream Gatherers baut ihr leistungsfähige Streaming-Operationen mit Zustand – wie Sliding Windows und Folding.
Zahlreiche Übungen und ein abschließender Refactoring-Workshop sorgen dafür, dass ihr das Gelernte direkt anwenden könnt – mit echtem Mehrwert für eure Projekte.
👉 Du möchtest das komplette Spektrum der Stream API in einem Kurs? → Kombikurs Java Streams Basics + Advanced
👉 Euer Team arbeitet noch mit Java 17 oder 21? Dann könnte auch unsere Java-25-Schulung interessant für euch sein.
Zielgruppe
Der Kurs richtet sich an erfahrene Java-Entwickler:innen, die bereits mit Streams gearbeitet haben und jetzt tiefer in fortgeschrittene Themen einsteigen möchten.
Wenn ihr regelmäßig mit Streams arbeitet, euren Code weiter verbessern wollt – oder neugierig auf Custom Collectors, Gatherers oder Spliterators seid – seid ihr hier genau richtig.
Agenda
Die Themen bauen systematisch aufeinander auf. Wir wechseln zwischen fortgeschrittener Theorie, konkreten Anwendungsfällen und praxisorientierten Übungen – immer mit Blick auf Performance, Lesbarkeit und Wartbarkeit.
Advanced Collectors und Reduce Operations:
reduce() für Aggregationen: Konzepte und praktische Anwendungpeek() für Debugging: Wann sinnvoll, wann nicht- Grouping:
groupingBy(), partitioningBy() - Downstream Collectors:
counting(), summingInt(), averagingDouble() - Nested Grouping und komplexe Aggregationen
joining() für String-Operationen- Praktische Übungen: Komplexe Datenanalyse mit Collectors
Custom Collectors entwickeln:
- Collector Interface verstehen:
supplier(), accumulator(), combiner(), finisher() - Characteristics:
CONCURRENT, IDENTITY_FINISH, UNORDERED - Einfache Custom Collectors implementieren
- Komplexere Scenarios: Custom Object Collection
- Praktische Übungen: Eigene Collectors schreiben
Stream Performance und Spliterator Grundlagen:
- Wann Streams verwenden vs. traditionelle Schleifen
- Performance-Fallen: Boxing/Unboxing, zu lange Pipelines
- Parallel Streams: Wann sinnvoll, Common Fork/Join Pool
- Memory-Effizienz und große Datenmengen
- Spliterator verstehen: Was ist ein Spliterator und seine Rolle
- Spliterator Characteristics:
ORDERED, SIZED, SUBSIZED, CONCURRENT, etc. - Wie Characteristics die Stream-Performance beeinflussen
Legacy Code Refactoring Workshop:
- Gemeinsame Refactoring-Session: Schleifen zu Streams
- Identifikation geeigneter Refactoring-Kandidaten
- Schritt-für-Schritt Transformation von Legacy Code
- Performance-Vergleiche: Vorher/Nachher
- Code-Readability vs. Performance Trade-offs
- Wann Refactoring sinnvoll ist und wann nicht
- Praktische Übungen: Verschiedene Legacy-Szenarien
Fortgeschrittene Stream-Patterns und Custom Spliterators:
- Conditional Operations mit
Optional - Error Handling in Streams
- Custom Spliterator implementieren: Eigene Datenstrukturen für Streams
- Spliterator Patterns:
tryAdvance(), trySplit(), estimateSize() - Parallelisierung optimieren durch custom Spliterators
- Stream von Files: Lines, Directory Walking
- Infinite Streams:
generate(), iterate() - Praktische Übungen: Custom Spliterator für spezielle Datenstrukturen
Stream Gatherers (ab Java 22, finalisiert in Java 24):
- Was sind Stream Gatherers und warum wurden sie eingeführt
- Gatherer Interface verstehen:
initializer(), integrator(), combiner(), finisher() - Built-in Gatherers:
fold(), scan(), windowFixed(), windowSliding(), mapConcurrent() - Custom Gatherers implementieren
- State Management in Gatherers
- Praktische Übungen: Eigene Gatherers für spezielle Use Cases
Integration und Architecture Patterns:
- Streams in Repository Pattern
- Functional Programming Principles mit Streams
- Stream-basierte APIs designen
- Migration Strategies: Legacy Code zu Streams
- Anti-Patterns und Debugging: Typische Fehler vermeiden
- Testing von Stream-Code
Workshop und Problemlösung:
- Komplexes Praxisprojekt: Ende-zu-Ende Stream-Pipeline
- Code Review Session: Teilnehmer-Code analysieren
- Performance-Optimierung an realen Beispielen
- Q&A und individuelle Problemstellungen
- Best Practices Zusammenfassung
Agenda als PDF