Java may not be the most functional friendly language, although calling a language "functional" often mainly means that it does not support any other programming paradigm than the functional one. Scala is the exception since it supports imperative programming as well as functional programming. Note that object orientation is not to be opposed to functional programming.
Java misses some constructions that are generally associated with functional programming, although they should not, such as
pattern matching and for comprehensions. These constructs are in fact not related to functional programming and could be use in imperative programming as well. If there is one feature that is really missing in Java (regarding functional programming), it is higher kinded types. All other missing features are either functional syntactic sugar or things you can implement yourself, as I show in my book,
Functional Programming in Java (Manning).
Note that there is a huge difference between dynamically and statically typed languages which makes it difficult to compare languages like Clojure and Haskell. One may build most of the tools needed for functional programming in Java (including stack safe recursion which, although not specifically related to functional programming, is used (too much?) heavily with this paradigm), but there is no way to use dynamic types with a statically type language (and conversely).
The best things Java 8 brings us to support functional programming are Lambdas. And methods reference are a very useful addition (not specific to functional programming, by the way).
But if your question was about how much (or how well) the standard Java 8 library supports functional programming, the answer is very poorly. Unfortunately, streams have many problems (from the functional programming point of view), mainly because they are made to work with standard Java lists with in place mutation through effects, instead of using immutable lists and functions. Optional is unusable in many cases because it is not serializable. But it is easy to define immutable lists, functional streams and a correct Option class as well as the numerous other functional constructs that are available in so called "functional" languages