1 - Java 8, 9, 10, and 11: what’s happening? 2 - Passing code with behavior parameterization 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 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