Sounds like the same issue I had with Clojure and Scala. As soon as you touch anything Java or mutable, it's like WTF?
Come to the Elixir/Erlang camp; our functional turtles go all the way down! The only jarring thing is having to write to a mutable database. They even borrowed the |> operator! And it has great pattern matching of course.