Modern Java Recipes: Simple Solutions to Difficult Problems in Java 8 and 9