Augmenting Object-Oriented Code with Functional Principles
Ben Weidig

#Java
#software_development
#Design_Patterns
Java developers usually tackle the complexity of software development through object-oriented programming (OOP). But not every problem is a good match for OOP. The functional programming (FP) paradigm offers you another approach to solving problems, and Java provides easy-to-grasp FP tools such as lambda expressions and Streams. If you're interested in applying FP concepts to your Java code, this book is for you.
Author Ben Weidig highlights different aspects of functional programming and shows you how to incorporate them into your code without going "fully functional." You'll learn how, when, and why to use FP concepts such as immutability and pure functions to write more concise, reasonable, and future-proof code. Many developers seek to expand their horizons by using OOP and FP together. It's no longer either-or; it's both.
In this book, you will:
Table of Contents
Part I. Functional Basics
Chapter 1. An Introduction to Functional Programming
Chapter 2. Functional Java
Chapter 3. Functional Interfaces of the JDK
Part II. A Functional Approach
Chapter 4. Immutability
Chapter 5. Working with Records
Chapter 6. Data Processing with Streams
Chapter 7. Working with Streams
Chapter 8. Parallel Data Processing with Streams
Chapter 9. Handling null with Optionals
Chapter 10. Functional Exception Handling
Chapter 11. Lazy Evaluation
Chapter 12. Recursion
Chapter 13. Asynchronous Tasks
Chapter 14. Functional Design Patterns
Chapter 15. A Functional Approach to Java
Why I Wrote This Book
After using another multipurpose language with excellent functional programming support—Swift—and seeing the benefits firsthand, I gradually introduced more and more functional principles in my Java-based projects, too. Thanks to lambda expressions and all the other features introduced in Java 8 and later, all the tools necessary were readily available. But after using these tools more frequently and discussing them with my colleagues, I realized something: How to use lambdas, Streams, and all the other functional goodies provided by Java is easy to grasp. But without a deeper understanding of why and when you should use them—and when not to—you won’t unlock their full potential, and it will just be “new wine in old wineskins.”
So I decided to write this book to highlight the different concepts that make a language functional, and how you can incorporate them into your Java code, either with the tools provided by the JDK or by creating them yourself. A functional approach to your Java code will most likely challenge the status quo and go against best practices you were using before. But by embracing a more functional way of doing things, like immutability and pure functions, you will be able to write more concise, more reasonable, and future-proof code that is less prone to bugs.
Who Should Read This Book
This book is for you if you are curious about functional programming and want to know what all the fuss is about and apply it to your Java code. You might already be using some functional Java types but desire a more profound knowledge of why and how to apply them more effectively.
There is no need to be an expert on OOP, but the book is not a beginner’s guide to Java or OOP. You should already be familiar with the Java standard library. No prior knowledge of functional programming is required. Every concept is introduced with an explanation and examples.
The book covers Java 17 as the latest Long-Term-Support (LTS) version available at publication. Knowing that many developers need to support projects with earlier versions, the general baseline will be the previous LTS, Java 11. But even if you’re stuck on Java 8, many of the discussed topics are relevant. However, some chapters will rely on newer features, like Records, which were introduced in Java 14.
This book might not be for you if you are looking for a compartmentalized, recipe-style book presenting “ready-to-implement” solutions. Its main intention is to introduce functional concepts and idioms and teach you how to incorporate them into your Java code.
What You Will Learn
By the end of this book, you will have a fundamental knowledge of functional programming and its underlying concepts and how to apply this knowledge to your daily work. Every Java functional type will be at your disposal, and you will be able to build anything missing from the JDK by yourself, if necessary.
You will learn about the concepts and importance of the following aspects of functional programming:
Even without going fully functional, your code will benefit from the concepts and idioms presented in this book. And not only your Java code. You will tackle development challenges with a functional mindset, improving your programming regardless of the used language or paradigm.
"The functional paradigm is a significant change in Java programming, but it doesn't mean abandoning OOP completely. 'A Functional Approach to Java' is a must-read for any programmer looking to improve their skills and stay current in programming."
— A N M Bazlur Rahman, Java Champion
Ben Weidig is a self-taught software developer with almost two decades of experience in professional web, mobile, and systems programming in various languages. After learning the ropes of professional software development and project management at a clinical research organization, he became a self-employed software developer and is now co-director of a Java-based SaaS company.
Besides sharing his expertise and experiences by writing articles about Java, functional programming, best practices, etc., he actively participates in Open-Source, either as a committer to established projects or releasing his own code.









