是否有用于函数编程的java库?

时间:2012-08-09 18:52:29

标签: java functional-programming

是否有人在java中编写了一个提供映射功能的库(例如来自lisp的mapcar)。

我看到了这个post和其他几个(例如这个this one),但遗憾的是我没有想到主流和/或可用的东西。

2 个答案:

答案 0 :(得分:6)

有一些。它们通常被描述为类似“Java中的函数式编程”库,而不是引用LISP。

在我的公司,功能编程德鲁伊在Functional Java作为他们的首选图书馆,虽然有一个重要且有声音的少数人喜欢Guava中的功能性条款。

Guava是一个非常主流和受欢迎的图书馆;它坚定地在“没有人被解雇使用”类别。 FJ可能不那么出名,但我们很高兴地使用它。我们甚至forked it,所以我们可以帮助改进它。

答案 1 :(得分:2)

那么你会期待Java 8!它将包含Project Lambda,它对于类似闭包的匿名类具有更好,更好的语法。示例:

Iterable<String> strs = ...
Iterable<String> downCased = strs.map(s -> s.toLowerCase());

任何带有一个方法的接口(或带有一个抽象方法的抽象类)都可以使用这种语法,包括Guava的FunctionPredicate(尽管Java 8有自己的{ {1}}和Mapper接口,因此可以直接使用这些接口)。在这种情况下,Predicate是一种新的扩展方法,它采用名为Iterable.map的新接口类型。

如果你想了解更多Java 8 lambdas的例子,请问!

†匿名类的所有常规限制仍然适用,包括本地自由变量必须“有效最终”。这意味着您不必将变量显式标记为Mapper,但仍然不允许您更改该值。