Getting started 4 lessons

Object-oriented Java 3 lessons

Collections and generics 2 lessons

Modern Java (functional programming) 9 lessons

10 Functional Interfaces: The Foundation of Modern Java Learn the single-method interfaces behind every lambda — Predicate, Function, Supplier, Consumer and friends — and compose them like building blocks. Advanced5 min read 11 Lambda Expressions: Code You Can Pass Around Write lambdas in every form, replace anonymous classes, sort and filter with them, and pass behaviour into your own methods. Advanced5 min read 12 Method References: Lambdas, Even Shorter Use the :: operator to turn existing methods and constructors into functions — and learn the four kinds of method reference. Advanced4 min read 13 Closures in Java: Capturing Variables and "Effectively Final Understand how lambdas capture variables, why Java requires them to be effectively final, and how to build functions that remember their configuration and state. Advanced6 min read 14 Optional: Say Goodbye to NullPointerException Model "maybe there's no value" explicitly with Optional — create, transform and unwrap it safely, and learn when not to use it. Advanced5 min read 15 Streams API: The Basics Process collections declaratively with streams — filter, map, sort and summarise data in readable pipelines, and understand laziness. Advanced5 min read 16 Advanced Streams: Collectors, groupingBy and flatMap Turn streams into reports — group and count with groupingBy, split with partitioningBy, flatten nested data with flatMap, and reduce, join and summarise in one pass. Advanced6 min read 17 Records, Sealed Types and Pattern Matching Model data with records, close type hierarchies with sealed interfaces, and take them apart safely with pattern matching in switch (Java 21). Advanced4 min read 18 CompletableFuture: Asynchronous Java Run slow work in parallel and combine the results with CompletableFuture — chaining, combining, waiting for many, handling errors and timeouts. Advanced5 min read