有没有适用于Java的函数式编程库?
我正在寻找像Predicate和List.Find()(作为静态方法)等内容。这些实现并不复杂,但在这里找到可重用的库将是很好的。
FunctionalJava是最知名的Java库之一,它利用Java闭包(BGGA)进行编程示例:
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}
编辑
还可以查看lambdaj.
进一步编辑
BGGA是完全可选的。它只是为了更好的语法。
Scala是一种函数式编程语言,与Java完全兼容(通过JVM运行)。它提供了面向对象和函数式技术的完美结合,并在泛型和并发性方面比Java有许多改进。 甚至有人认为它可以取代Java。
有些库可以帮助您完成这个过程,通过为您完成所有工作并隐藏玄学事物:
这些将允许您使用更具功能性且可能更熟悉FP能力语言中预期的语法和语义编写Java代码。在合理范围内,当然是这样。
显然,您可以在Java之上实现功能语言。因此,您可以将其作为FP语言使用。这比您所请求的抽象级别稍高,但相对而言,它仍然与上下文相关(尽管我在这里有点耍小聪明)。
例如,请查看:
您可能还想阅读或观看以下文章或视频:
摘自我的 P.SE 上对 "Java 中是否可能进行函数式编程?"的回答。
Google Collections 包含了不少函数式编程风格的常用实用方法。有一些关注点的类包括 Iterables、Iterators、Function、Functions 等。
它还有许多集合类!
函数式Java是值得一看的,FunctionalJ也是。
这里提到了Scala,但有一种更轻量级且更兼容Java的语言:Xtend。它编译成普通的Java,并使用相同的类型系统。它具有出色的Eclipse支持。您可以在单个项目中混合使用.java
和.xtend
文件。
示例代码:
def static void main(String[] args) {
val s = #[1,2,3].map[it+43].join(", ")
println(s);
}
您可以下载OpenJDK 8来尝试Lambda表达式,这是Java 8中将会变成的一种方式。其中,集合API被调整以支持函数式编程风格。请参见http://macgyverdev.blogspot.se/2012/10/functional-programming-in-java.html,获取新的集合API的示例以及与Guava、LambdaJ和FunctionalJava的比较。