Functional Programming in Java : Harness the Power of Streams and Lambda Expressions