This three-day combined training merges the content of two individual courses – Java Streams Basic and Java Streams Advanced – and gives you a practical and in-depth understanding of the Java Stream API: from the basics and best practices to advanced techniques like Custom Collectors and Stream Gatherers.
On the first day, you'll learn the functional programming fundamentals and the structure of stream pipelines:
All of this is directly applied in hands-on exercises – the perfect foundation for the advanced topics on days two and three.
On days two and three, the focus shifts to efficiency, extensibility, and modern techniques:
You’ll gain a deep understanding of how streams work internally – and you'll be equipped to confidently decide when and how to use streams effectively – and when it’s better not to.
The course concludes with a comprehensive final project, where you'll model a real-world data processing scenario using streams – from requirements through stream design to a performant solution. We’ll review your results together and discuss best practices for production-ready stream code.
👉 Just looking for the basics? Check out Java Streams Basics – Practical Fundamentals for Beginners.
👉 Only want the advanced topics? Then Java Streams Advanced – Gatherers, Spliterators & More might be the better fit.
This course is designed for Java developers who want to learn how to use the Streams API efficiently and elegantly – from the ground up – and then immediately take the next step: focusing on performance, extensibility, and modern features like gatherers or custom spliterators.
It’s ideal for anyone seeking a comprehensive knowledge of Java Streams in a short time – for example, during a technology upgrade, relaunch, or refactoring project.
This course combines the content of both individual trainings. We start with the fundamentals and then progressively dive into advanced techniques – with plenty of examples, exercises, and space for your questions.
Consumer
, Supplier
, Function
, Predicate
, etc.)IntStream
, LongStream
, DoubleStream
map()
, flatMap()
, filter()
distinct()
, sorted()
, limit()
, skip()
peek()
– used correctlycollect()
– the most versatile terminal operatortoList()
, toSet()
, toMap()
forEach()
, forEachOrdered()
reduce()
for aggregationsfindFirst()
, findAny()
allMatch()
, anyMatch()
, noneMatch()
Advanced Collectors and Reduce Operations
reduce()
: concepts and practical usepeek()
: when it’s helpful and when notgroupingBy()
, partitioningBy()
counting()
, summingInt()
, averagingDouble()
joining()
Building Custom Collectors
Collector
interface: supplier()
, accumulator()
, combiner()
, finisher()
CONCURRENT
, IDENTITY_FINISH
, UNORDERED
Stream Performance and Spliterator Basics
ORDERED
, SIZED
, SUBSIZED
, CONCURRENT
, etc.Legacy Code Refactoring Workshop
Advanced Stream Patterns and Custom Spliterators
Optional
tryAdvance()
, trySplit()
, estimateSize()
generate()
, iterate()
Stream Gatherers (Java 22+)
Gatherer
interface: integrator()
, combiner()
, finisher()
fold()
, scan()
, windowFixed()
, windowSliding()
Integration and Architecture Patterns
Workshop and Problem Solving
I’m a Java expert with over 20 years of experience – as a developer, architect, CTO, performance coach, and trainer.
I’ve designed enterprise-scale systems for companies like 1&1, IONOS, and ICE Services, modernized legacy apps, and helped teams build robust, maintainable, and high-performance Java software.
With HappyCoders.eu, I’ve built one of the most widely read Java blogs in the German-speaking world. I speak at conferences and Java User Groups – and often receive praise for making complex technical topics easy to understand.
What you’ll get from my courses:
I don’t just teach features – I show you how to develop better software with a deep understanding of Java.