First Principles implementation of the Java functional constructs: Stream, Optional, List, Tree and Try