Java 8

A 2 to 3-day course, introducing Java 8's core from lambda expressions and default methods to Stream, Optional, CompletableFuture and the DateTime API

This course teaches everything a Java developer needs to know about the Java module system that was introduced in Java 9. It starts with good old JAR hell and the chaos of the class path to motivate the module system's introduction. After that, the basics are explained before more advanced uses are introduced. Last but not least, the course covers migration challenges when upgrading from Java 8 (most of them caused by the module system) and how to modularize existing projects.

Every aspect is taught with theoretical introductions, practical exercises, and usage recommendations.

Optionally, we can also discuss the six-month release cadence and licensing/support of JVM distributions.

Java developers who've either never used Java 8 or just didn't dive particularly deep yet
Solid Java skills; a good understanding of generics helps a lot
2-3 days


After completing this course, participants will be able to:

  • confidently use lambda expressions to handle code as data
  • write more readable and maintainable code with Streams
  • understand the intrinsics and trade-offs of stream pipelines (e.g. regarding parallelization)
  • lift null handling from if-checks and NPEs into the type system with Optional
  • write clearer and more performant multi-threaded code with CompletableFuture
  • use the DateTime API for safer handling of dates, times, and timezones
  • understand functional programming cornerstones like function composition and immutability


  • generics recap (because we use them a lot)
  • functional interfaces
  • lambda expressions, closures, method references
  • Stream sources, operations, collectors, specializations, optimizations, and pitfalls
  • handling Optional the imperative and the functional way
  • function composition, immutability, side-effect free code, pure functions, Monads
  • creating and composing asynchronous operations, extracting results, handling errors, timing out, forking and joining computations with CompletableFuture
  • DateTime API as replacement for Date and Calendar
  • syntax and semantics of default methods and how they're used in Java 8

Upcoming Public Sessions

While I mostly provide these courses in-house, there's the occasional public session that everybody can attend. None are planned now, but if you get in touch, I'll let you know when that changes.