• 1 - Java 8, 9, 10, and 11: what’s happening?
  • 2 - Passing code with behavior parameterization
  • 3 - Lambda expressions
  • 4 - Introducing streams
  • 5 - Working with streams
  • 6 - Collecting data with streams
  • 7 - Parallel data processing and performance
  • 8 - Collection API enhancements
  • 9 - Refactoring, testing, and debugging
  • 10 - Domain-specific languages using lambdas
  • 11 - Using Optional as a better alternative to null
  • 12 - New Date and Time API
  • 13 - Default methods
  • 14 - The Java Module System
  • 15 - Concepts behind CompletableFuture and reactive programming
  • 16 - CompletableFuture: composable asynchronous programming
  • 17 - Reactive programming
  • 18 - Thinking functionally
  • 19 - Functional programming techniques
  • 20 - Blending OOP and FP: Comparing Java and Scala
  • 21 - Conclusions and where next for Java
  • appendix A - Miscellaneous language updates
  • appendix B - Miscellaneous library updates
  • appendix C - Performing multiple operations in parallel on a stream
  • appendix D - Lambdas and JVM bytecode