I think Java programmers (and their buddies in C# and similar land) can benifit from adapting a straight forward functional style of programming.
Not the stream, map, reduce stuff.
But simply writing functions without side-effects and separating data from functions.
"Remember that software is at its core procedural."
That may be true in some sense. But most Java code is in fact not procedural but stateless in the sense that most often state is store in a database or another external system.