There is a
load of introductory stuff about FP at the JavaRanch Functional Programming forum, so that should help to get you started. There is also some stuff on Clojure and Scala in the excellent book
The Well Grounded Java Developer by Ben Evans and Martijn Verburg, which is worth buying anyway, regardless of your interest in FP.
You're right that there is a lot more talk about FP this days, and I'm seeing a real growth in Scala job ads in particular. I think this is partly because Scala is a little easier for Java developers to get started with and you can use it as a "better Java" or you can go FP all the way. It has a number of significant corporate backers/users e.g. Twitter, LinkedIn, etc, and is being heavily promoted as the tool of choice for concurrency, Big Data (
Apache Spark is written in Scala) and "enterprise-y" stuff in general. However, many of the same arguments apply for FP generally, not just Scala.
There are quite a few Scala books out there now, although the language has been developing fast so some of the older ones may be a little out of date. There are free samples of some of these (and others) on the
Typesafe website, as well as lots of other Scala-related resources. My
O'Reilly tips are in
bold.
Programming In Scala by Martin Odersky. Odersky invented Scala, so this is probably the best general reference book on the language to keep on your shelf, but I found his style a bit academic if you're mainly interested in getting started with the language.Scala For The Impatient by Cay Horstmann is much better as a learning resource in terms of structure, and Horstmann's experience of writing tech books clearly shows.Scala In Action by Nilanjan Raychaudhuri is quite a good tutorial and all-round look at Scala in the classic Manning "XXX In Action" style, and you get a free ebook if you buy the print edition.Testing In Scala by Daniel Hinojosa might be an easy place to start, because Scala has some really nice testing tools that you use in Java as well. However, this book is pretty light, and you can get a lot of this stuff elsewhere online e.g. check out Kip Sigman's nice 15 minute video on Scala testing if you're curious.The excellent Scala Cookbook by Alvin Alexander assumes you know a little Scala and is an outstanding collection of tips, tricks and techniques to make your Scala shine. I can see this being the most useful book in my Scala collection.Another interesting book for OO people coming to FP is Functional Programming Patterns in Scala and Clojure by Michael Bevilacqua-Linn, which looks at how various classic OO patterns are expressed in FP (many are no longer needed), and also at specifically functional patterns.
Talking of going from OO to FP:
Functional Programming for the Object-Oriented Programmer by Brian Marick is a clever tutorial approach to help OO developers learn FP in Clojure.
Clojure is basically a Lisp language for the JVM, with various modern features added and some work-arounds for limitations of the JVM, and like Scala it has excellent interoperability with Java i.e. you can call Java from Clojure etc. It was created by Rich Hickey, who has a very strong (and IMO very persuasive)
concept of "simplicity" in programming, which really shines through all of Clojure. So Clojure is very different from Scala both in form and underlying
philosophy. I really like what I've seen of Clojure (not much!) and it's fun to work with, but right now it probably has less take-up in the "enterprise" than Scala, partly because of its Lisp origins which put some people off, and perhaps partly because it looks too "simple": I think some people still seem to feel their "enterprise" software has to look like Java EE!
I haven't seen so many Clojure books, but they include:
Clojure Programming by Chas Emerick, Brian Carper and Christopher Grand, which is easily the most comprehensive Clojure programming book I've seen. It's full of good stuff on a wide range of topics, from FP basics to web and database programming, including some tips on "Introducing Clojure into Your Workplace (or, Sneaking Clojure Past the Boss)"!The second edition of The Joy Of Clojure by Michael Fogus is about to be released. The first edition was a good intro to FP in Clojure, but not as thorough as the "Clojure Programming" book.Web Development With Clojure by Dmitri Sotnikov is a quick practical intro to web application development in Clojure, which is fun and nicely illustrates how much you can do with just a few lines of code in Clojure.There's also an interesting little book Clojure Data Analysis Cookbook by Eric Rochester which is not an O'Reilly "cookbook" but has lots of practical ides for using Clojure for data science.
And if learning Lisp feels too daunting, you could prepare by working through
The Little Schemer by Daniel Friedman and Matthias Felleisen, which is a strange but effective introduction to the basics of Scheme (a Lisp language) that may help you to get your head into the FP mindset. And it's fun, in a weird, central-European-animated-films-of-the-1960s kind of a way!
Finally, you've no doubt seen that Java is starting to take up some of the ideas that have been around in FP for decades e.g. lambdas, so FP techniques will become more relevant to Java developers in future. There are books and other materials around for learning how to do FP in Java. But to be honest, I think it's much easier to learn FP in a language that's actually designed for it - e.g. Scala and Clojure on the JVM, or Haskell, Scheme/Racket etc outside the JVM. If you subsequently find yourself having to do FP in Java in a legacy environment, then at least you'll know how functional techniques are supposed to work, and maybe you'll even be able to sneak some real FP past the boss!