Java 8 in Action: Lambdas, Streams, and functional-style programming