Part I — Why Functional Programming Matters in Java
- Chapter 1. Why Java Developers Struggle with Complexity
Chapter 2. A Brief History of Functional Programming (Without the Math)
Chapter 3. Thinking in Data, Not Objects
Part II — Core Functional Programming Concepts in Java
Chapter 4. Immutability: The Foundation
Chapter 5. Pure Functions and Referential Transparency
Chapter 6. Functions as First-Class Citizens
Chapter 7. Composition Over Inheritance (For Real)
Part III — Functional Data Modeling in Modern Java
Chapter 8. Records: Java’s Missing Value Type
Chapter 9. Sealed Types and Algebraic Thinking
Chapter 10. Null Is Not a Feature
Part IV — Working with Collections Functionally
Chapter 11. Streams: Power and Pitfalls
Chapter 12. Designing with Transformations, Not Loops
Chapter 13. Error Handling Without Exceptions Everywhere
Part V — Containing Side Effects
Chapter 14. Side Effects Are Inevitable—Chaos Is Optional
Chapter 15. Dependency Injection, But Functional
Part VI — Introduction to Functional Optics
Chapter 16. The Real Problem: Updating Nested Immutable Data
Chapter 17. Lenses: Focused Reads and Writes
Chapter 18. Prisms: Working with Variants Safely
Chapter 19. Optionals, Lists, and Traversals
Part VII — Functional Optics in Real Java Code
Chapter 20. Implementing Optics with Records and Sealed Types
Chapter 21. Integrating Optics into Existing Codebases
Chapter 22. Performance, Readability, and Trade-offs
Part VIII — Putting It All Together
Chapter 23. A Real-World Case Study
Part IX — Beyond the Book
Chapter 24. Libraries, Tools, and Ecosystem
Chapter 25. How Far Should You Go?
Chapter 26. The Future of Functional Programming in Java
- Conclusion