Functional Programming in Java Harnessing the Power of Java 8 Lambda Expressions by Venkat Subramaniam