Some Notes :
FunctionalInterfaces: predicate - to test something consumer - consume/take something , return nothing supplier - returns something function - takes and return something
Optional - orElseGet is better than orElse as the latter is evaluated every time filter , map,flatmap,