Skip to content

Contact sales

By filling out this form and clicking submit, you acknowledge our privacy policy.

Functional Programming for Java Developers

Course Summary

The Functional Programming for Java Developers training course is designed to provide the Java Developer with the knowledge and skills to incorporate functional programming into their daily coding lives.

The course begins by covering the fundamentals of functional programming in contrast to imperative programming and how functional style can reduce bugs, and increase the maintainability of code. Next, students will learn about immutability, pure functions, functions as first-class values, higher-order functions, and simple monads. The course also introduces functional concurrency, with Java's Promise mechanism, provided by the CompletableFuture API. The course also teaches how to mix programming styles during migration, and how to handle exceptions in a functional system. The course concludes with investigating the overlap between object-oriented programming concepts such as the Liskov Substitution Principle and design patterns with functional concepts.

Hands-on exercises will be incorporated throughout to enhance learning.

Learn to utilize functional programming when creating code.
Developers and developer teams needing to learn Functional Programming for Java Developers.
Data Scientist - Software Developer - Web Developer
Skill Level
3 Days
Related Technologies


Productivity Objectives
  • Describe Functional Programming and how it differs from imperative programming
  • Explain how side-effect-free functions reduce errors and are easier to test
  • Employ immutable data, and understand how immutable data structures can be used in a memory-efficient way
  • Formulate higher-order functions and use syntax that simplifies these constructs
  • Utilize generics, along with co- and contra-variance to create more reusable functional code
  • Examine Monads and Functors and common operations these provide
  • Use common Monadic libraries for parallel and asynchronous data processing

What You'll Learn:

In the Functional Programming for Java Developers training course, you'll learn:
  • Introducing the Pure Function Concept
    • What are "side effects"?
    • What are "observable side effects"?
    • Why we care: composability of program elements and maintenance
    • Avoiding mocking: Testing a pure function
    • Refactoring our thinking and designs for pure functions
  • Immutability in the Real World
    • Unresolved and resolved values
    • Variable names and "meaning something else"
    • Expressions versus variables
    • Warning: Initialization is mutation
    • Overview of recursion
    • Overview of immutable data structures
  • Solving a Simple Design Problem Using Imperative and Functional Styles
    • Printing items from a list
    • Passing behavior as function arguments
    • Introduction to higher-order functions
  • Java's Lambda Syntax
    • Lambdas
    • The single abstract method and functional interfaces
    • Method reference syntax
  • Behavior Factories
    • Methods returning behaviors
    • Returning behaviors that depend on the factory arguments
    • Closures in Java
    • Function decorators
    • Investigating some of Java's standard function decorators
  • The Importance of Generics in Functional Programming
    • Generics as the polymorphism of functional style
    • Using generics to describe higher-order functions
    • Co- and contravariance in higher-order function arguments
  • Introduction to the Monad Concept
    • A smart container
    • Selecting items
    • Changing items, the Functor
    • The flatMap method, the Monad
  • Introduction to Producing a Final Result
    • The reduce operation
  • More Advanced and Parallel Production of a Result
    • The Monoid
    • Reductions to a different type
    • Fold operations
  • Overview of Monad-like Libraries and Frameworks
    • Java Streams
    • Java's Promise API, the CompletableFuture
    • Spark Streaming
  • Handling Errors in Functional Programming
    • Using reliable, purpose-specific, abstract data types can avoid problems
    • Total vs partial functions
    • The trouble with exceptions
    • Using Optional and Either monad-like features
    • Wrapping code that throws exceptions
“I appreciated the instructor's technique of writing live code examples rather than using fixed slide decks to present the material.”


Dive in and learn more

When transforming your workforce, it's important to have expert advice and tailored solutions. We can help. Tell us your unique needs and we'll explore ways to address them.

Let's chat

By filling out this form and clicking submit, you acknowledge our privacy policy.