Module 13: Functional Programming and Streams
Mini-Project: Student Report Pipeline
Build a reporting pipeline that groups, filters, and summarizes student data.
Author
Java Learner Editorial Team
Reviewer
Technical review by Java Learner
Last reviewed
2026-04-17
Java version
Java 25 LTS
Learning goals
- Apply stream pipelines to a realistic dataset
- Produce several outputs from the same collection
- Balance expressive stream code with readability
Project goal: Start with a list of students, then produce outputs such as passing students, average score, or grouped labels.
What to practice: filter, map, count, toList, maybe one collector, and clear naming for the pipeline steps.
Keep it readable: If one chain becomes too dense, split it into small helper methods or intermediate variables.
Success check: Another developer should understand the data flow without reading the pipeline three times.
Runnable examples
A simple filtered report
var passed = students.stream()
.filter(student -> student.score() >= 60)
.map(student -> student.name())
.toList();Expected output
Produces a list of student names that passed.
Mini exercise
Start with a list of five students and print only the names of those scoring 80 or higher.
Summary
- Streams are strongest when processing collections into useful summaries.
- Readable stream code beats overly clever stream code.
- This project is about data flow clarity as much as syntax.
Next step
The final intermediate module covers enums and annotations, two small tools that make Java code clearer.
Sources used