Functional Programming in Java: How functional techniques improve your Java programs