Chapter 1. Java 8: why should you care?
2. Functional-style data processing
Chapter 4. Introducing streams
Chapter 5. Working with streams
3. Effective Java 8 programming
Chapter 8. Refactoring, testing, and debugging
Chapter 10. Using Optional as a better alternative to null
Chapter 11. CompletableFuture: composable asynchronous programming
Chapter 13. Thinking functionally
Chapter 14. Functional programming techniques
Appendix A. Miscellaneous language updates
Appendix B. Miscellaneous library updates
Appendix C. Performing multiple operations in parallel on a stream