This chapter includes 22 problems that involve Java functional-style programming. Here, we will focus on several problems that involve classical operations that are encountered in streams (such as, filter and map), and discuss infinite streams, null-safe streams, and default methods. This comprehensive list of problems will cover grouping, partitioning, and collectors, including the JDK 12 teeing() collector and writing a custom collector. In addition, takeWhile(), dropWhile(), composing functions, predicates and comparators, testing and debugging lambdas, and other cool topics will be discussed as well.
Once you've covered this and the previous chapter, you will be ready to unleash functional-style programming on your production applications. The following problems will prepare you for a wide range of use cases, including corner...