Functional Programming in Java

JavaFunctional Programming

Java Problem Overview


Is there a good library for functional programming in Java?

I'm looking for stuff like Predicate and List.Find() (as a static method). Not complicated to implement, but it would be nice to find a reusable library here.

Java Solutions


Solution 1 - Java

FunctionalJava is the best known library; it makes use of Java closures (BGGA) for examples:

final Array<Integer> a = array(1, 2, 3);  
final Array<Integer> b = a.map({int i => i + 42});  
arrayShow(intShow).println(b); // {43,44,45}  

EDIT

Check also lambdaj.

Further EDIT

BGGA is entirely optional. It just makes for nicer syntax.

Solution 2 - Java

Scala is a functional programming language that is fully compatible with Java (runs through the JVM). It offers a beautiful mix of object-oriented and functional techniques along with many improvements over Java in generics and concurrency. Some even say it could replace Java.

Solution 3 - Java

Java Libraries

There are libraries that can help you do this, by already doing the legwork for you and hiding the arcane things:

Mature / Established Libraries
More Obscure / Experimental Libraries

These will allow you to write Java code with a more functional approach and possibly more familiar syntax and semantic, as you'd expect from an FP-competent language. Within reason, that is.

JVM Languages

And obviously, you can implement a functional language on top of Java. So that you can then use that one as your FP language. Which is a bit of a higher-level of abstraction than what you asked for, but relatively within context (though I'm cheating a bit here, granted).

For instance, check out:

Quite Mature Languages
Less Mature or More Obscure Languages

Further Reading

You may also want to read or watch these articles or videos:


Taken from my P.SE answer to "Is Functional Programming Possible in Java?"

Solution 4 - Java

Google collections has a decent selection of functional-programming style utility methods. Some classes of interest are Iterables, Iterators, Function, Functions, etc

It also has a bunch of collection classes as well!

Solution 5 - Java

Functional Java is one that's worth taking a look at and FunctionalJ is another.

Solution 6 - Java

If you want a pure Java solution check out lambdaj

http://code.google.com/p/lambdaj/

Besides the possibility to define and use closure in a DSL-style, it also allows to manipulate collections in a functional way, without explicitly write closures or loops

Solution 7 - Java

Jambda is another FP-library. From the documentation:

> Jambda is an attempt to provide the > Java(TM) world with tools and concepts > from functional programming (FP). > > The goals are several: >

  • To provide Java programmers with expressive FP constructs
  • To provide a bridge for Java programmers into the FP-world
  • To see how far Java and generics can be stretched

> This > document is an attempt to introduce > Java programmers into the FP world, > and at the same time explain some (or > most) of the features in Jambda.

Solution 8 - Java

Apache Commons has some functional-ish code in it. See for example, the Predicate interface.

Solution 9 - Java

Google Guava has functional:

  • collection operations
  • concurrency constructs (Futures)

Solution 10 - Java

Or download OpenJDK 8 to try out Lambda expressions the way they will become in Java 8. Among others, the collection APIs are adjusted to support a functional style. See http://macgyverdev.blogspot.se/2012/10/functional-programming-in-java.html for examples of new collection APIs and comparisons with Guava, LambdaJ and FunctionalJava.

Solution 11 - Java

Scala was mentioned here, but there's a lot lighter and more Java compatible language: Xtend. It compiles to plain Java and uses the same type system. It has great Eclipse support. You can mix .java and .xtend files in a single project.

Sample code:

def static void main(String[] args) {
	val s = #[1,2,3].map[it+43].join(", ")
	println(s);
}

Solution 12 - Java

Although Functional Java is the most popular but i'll suggest you to try Google guava lib.

http://code.google.com/p/guava-libraries/

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionripper234View Question on Stackoverflow
Solution 1 - JavadfaView Answer on Stackoverflow
Solution 2 - JavaGordon GustafsonView Answer on Stackoverflow
Solution 3 - JavahaylemView Answer on Stackoverflow
Solution 4 - JavaChiView Answer on Stackoverflow
Solution 5 - JavamikejView Answer on Stackoverflow
Solution 6 - JavaMario FuscoView Answer on Stackoverflow
Solution 7 - JavaJohan KullbomView Answer on Stackoverflow
Solution 8 - JavaTylerView Answer on Stackoverflow
Solution 9 - JavathSoftView Answer on Stackoverflow
Solution 10 - JavaJohan NorénView Answer on Stackoverflow
Solution 11 - JavarzymekView Answer on Stackoverflow
Solution 12 - JavaAmit MutrejaView Answer on Stackoverflow