posted 7 years ago
Hi Joris,
Java has not evolved much toward functional programming. Lambdas are a great addition, but they are not specific to functional programming, although they make it much easier. Functions are useful too, but they are so simple to create that it does not count for much. Optional, Stream and CompletableFuture, although they are Monads, are not implemented in a way that makes them much useful for functional programming. But functional programming is not tied to any language. It's a programming paradigm. It's easier with functional friendly languages, but it is possible in any language.
But the most interesting part of you question is "Why will people use Java to do their functional programming?". This leads to another question: "Why would people have some functional programming to do?" This means that you have some functional programming to do and must pick a language for that. Choosing Java to solve software problems is questionable. Generally, you chose the language you know. Otherwise, it can't be an educated choice. So you have to first learn a language in order to be able to make the choice of, eventually, using it (or not). But choosing Java to solve functional software problems would means that being functional is a goal, and not a mean. I can think about few use cases for this. For example if you are student in functional programming and are free to chose a language. But I would certainly not recommend Java for this.
Most often, the language is imposed, whether it is because of environment requirements, or because you work in in team, or because you have to deal with legacy code, or all these reasons at the same time (as in my own case). So the choice is not which language for my functional programming, but which paradigm for my Java programming.