Press "Enter" to skip to content

Pragmatic Functional Programming in Java 8+

Pragmatic Functional Programming in Java 8+

In this workshop, attendees will learn how to supercharge their everyday Java programming experience by utilizing pragmatic Functional Programming ideas – which allow writing readable, predictable and less error-prone code faster.

The course is aimed at Java professionals who want to quickly break the cognitive barrier of making a paradigm shift and get up to speed with new tools.


  1. Introduction to Idiomatic Functional Programming
    1. Definition and Pillars
      1. Immutability
      2. Referential Transparency
      3. Side-Effects
      4. Equational Reasoning
      5. Memoization
      6. Lazy Initialization
    2. Functor-based Design Patterns
      1. Exploring flatMap()/map() Differences
    3. Tail-Recursion
    4. Functions/Partial Functions
    5. Function Composition
    6. Function Currying
  2. Functional Programming in Java
    1. OOP vs FP
    2. Function Composition Dangers
    3. Finding the Sweet Spot
  3. Lambda Expressions Anatomy in Java
    1. Functional Interfaces
    2. Primitive Functional Interfaces
    3. Anonymous Inner Classes vs Lambda Expressions
    4. Effectively-Final Variables
    5. Exception Handling
  4. Declarative Programming
    1. Abstracting Computational Contexts
    2. Abstracting Iteration
    3. Abstracting Optionality
  5. Idiomatic Optional
    1. “The Billion Dollar Mistake”
    2. Abstracting Nullability with Optional
    3. Lifting Partial Functions to Total Using Optional
    4. Composing Potentially Absent Values
    5. Applying Functions
    6. Retrieving Values from an Optional
    7. Optional vs Option
  6. Lazy Evaluation in Java
    1. Overview
    2. Achieving Lazy Evaluation with Functional Interfaces
    3. Lazy Data Structures
    4. Building a Custom Lazy Wrapper
  7. CompletableFuture Deep Dive
    1. Future vs CompletableFuture
    2. Reactive Programming with CompletableFuture
  8. Streams API Deep Dive
    1. Working with Infinite Sequences
    2. Writing Custom Collectors
    3. Parallel Streams (and why they might be not suitable for production)
    4. Writing Custom Spliterators
    5. Parallel Collection Processing Without Parallel Streams
    6. Bugs/Quirks
  9. Gang of Four Design Patterns Revisited
  10. Functional Error Handling
    1. Errors as Values
    2. Option/Result/Try/Either
  11. Functional IO, Modularity, Testability
    1. Hexagonal Architecture, Dependency Inversion, and Functional Programming
  12. Functional Data Structures
    1. Collections API vs Immutability
    2. Persistent Collections
    3. List/Queue/Map
    4. Composing Collections with Monadic Types
  13. Functional Programming with Legacy Java 

This is just a default outline, the actual agenda is always derived from the pre-training analysis.


Excellent teacher, lots of exercises which go beyond the common stuff… and lots of additional exercises which you can explore after the workshop. I learned how to properly use “functional” java in my daily job. Thanks for the amazing workshop!

Grzegorz is really passionate – such people are always happy to listen to, he always learns well from such people and it also gives a nice motivational kick. In addition, you can see that he was also prepared to conduct training – both when it comes to preparing for classes, and that you can see that he is training in the field of didactics and tries to get people out as much as possible.

Greatly conducted training, very interesting. Knowledge has been given to us that you would not have taken 3 days to get on your own, but rather 3 months for practical use as well. Great preparation of materials, transfer of knowledge. One big plus.

If you enjoyed the content, consider supporting the site: