How Does Java Support Functional Programming