R&D software engineer at Alcatel-Lucent Submarine Networks, author of Functional Programming in Java (Manning Publications) and double bass jazz player
Abstraction is the key to tenable code bases. Where OOP eyes abstraction with suspicion, functional programming pushes it as far as possible.
Referential transparency is a tool to help programmers reason about their programs and make them safer, and easier to test and to maintain.
Functional programming can dramatically reduce the need for testing by using types to reduce the number of possible implementation choices.
Java is known as a mostly strict language. It's useful, however, to implement a 'Lazy' type for lazy initialization, deferred computations, etc.
Java is known as a strict language regarding references and method arguments. It's however possible (and very useful) to implement laziness in types.