programming as supported by Java 8. This includes the introduction of functional terms complemented by
Java 8 examples.
Chapter 2, Putting the Function in Functional Programming, covers the types of functions found in
functional programming languages such as high-order functions, first-class functions, and pure functions.
The use of lambda expressions in support of functions is explained.
Chapter 3, Function Composition and Fluent Interfaces, addresses how to use functional composition.
Also covered are fluent interfaces and the use of default methods.
Chapter 4, Streams and the Evaluation of Expressions, covers the basics of their creation and use.
Streams are an important addition to Java.
Chapter 5, Recursion Techniques in Java 8, demonstrates recursion, a very useful functional
programming technique. While not new to Java, we explore the topic in depth and examine the use of
recursive lambda expressions.
Chapter 6, Optional and Monads, covers the use and the nature of monads in creating fluent interfaces
and producing resilient code. The Optional class provides a better way of working with missing data.
Chapter 7, Supporting Design Patterns Using Functional Programming, illustrates design patterns. They
play an important role in Java programming. The impact of the functional style of programming and
lambda expressions is illustrated.
Chapter 8, Refactoring, Debugging, and Testing, demonstrates how these tools have been affected by the
new functional programming techniques and how IDEs support them. These are valuable tools in the
Chapter 9, Bringing It All Together, summarizes many of the functional programming techniques
presented earlier that are used in the creation of a demonstration application. Such an application
provides a concise illustration of how these techniques support the development of robust and