Lesson 6 of 628 minModule progress 0%

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

How this lesson was prepared: AI-assisted draft, manually edited for clarity, and checked against current Java documentation and runnable examples.

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

Advertisement

Lesson check

What should guide the final design of the stream project?

Next lesson →