Functional Java is an open source library that aims to prepare the Java programming language for the inclusion of closures. It also serves as a platform for learning functional programming concepts by introducing these concepts using a familiar language. The library is intended for use in production applications and is thoroughly tested using the technique of automated specification-based testing with ScalaCheck.
Functional Java currently includes the following algebraic structures:
-
Immutable, in-memory singly linked list (
fj.data.List) -
Immutable lazy singly linked list (
fj.data.Stream) -
Array wrapper (
fj.data.Array) -
Optional value type-safe null (
fj.data.Option) -
Disjoint union a superset of exception handling (
fj.data.Either) -
Monoid (
fj.pre.Monoid) - Functions with arity 1 to 8 usable with Java 7 closure syntax
- Products of 1 to 8
Functional Java includes usage examples and notably, code examples that make use of the Java 7 BGGA proposal syntax. Here is one such example (import statements omitted) that maps a transformation across an array by adding 42 to each element.
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}