Java中的函数式编程
在Java中有没有一个好的函数式编程库?
我正在寻找像Predicate和List.Find() (作为一个静态方法)的东西。 实现起来并不复杂,但是在这里find一个可重用的库是很好的。
FunctionalJava是最知名的图书馆; 它使用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是一个function性的编程语言,完全兼容java(通过jvm运行)。 它提供了面向对象和function性技术的完美结合,以及对generics和并发性方面的java的许多改进。 有人甚至说可以取代java。
Java库
有些图书馆可以帮助你做到这一点,已经为你做腿脚和隐藏奥秘的东西:
成熟/build立的图书馆
- function性的Java
- 谷歌番石榴
- LambdaJ
更晦涩的/实验性的图书馆
- Fun4J
- JCurry
- OCaml中的Java
- Jambda
- 螺栓
这些将允许您使用function更强大的方法编写Java代码,也可能使用更为熟悉的语法和语义,正如您所期望的FP主pipe语言。 在理由之内,那是。
JVM语言
显然,你可以在Java之上实现一个function语言。 所以你可以使用那个作为你的FP语言。 这是比你所要求的更高层次的抽象,但是在上下文中是相对的(尽pipe我在这里作弊了一些,但是被授予了)。
例如,检查:
相当成熟的语言
- Clojure的
- 斯卡拉
less成熟或更晦涩的语言
- 弗雷格
- Jaskell
进一步阅读
您可能还想阅读或观看这些文章或video:
- Java语言中的函数式编程 , IBM DeveloperWorks (2004)
- 函数式编程Java , Lambda the Ultimate (2004)
- 函数式编程:实用介绍 , InfoQ / CodePalousa(2011)
从我的P.SE回答“ 是否可以在Java中使用函数式编程? ”
Google集合有一个体面的selectfunction编程风格的实用方法。 一些有趣的类是Iterables,迭代器,函数,函数等
它也有一堆集合类!
Functional Java是值得一看的,而FunctionalJ则是另外一个。
如果你想要一个纯粹的Java解决scheme,请检查lambdaj
http://code.google.com/p/lambdaj/
除了以DSL风格定义和使用闭包之外,它还允许以function方式操作集合,而不显式编写闭包或循环
Jambda是另一个FP库。 从文档 :
Jambda试图为Java(TM)世界提供函数式编程(FP)中的工具和概念。
目标是几个:
- 为Java程序员提供富有performance力的FP构造
- 为Java程序员提供一个进入FP世界的桥梁
- 看看Java和generics能够延伸多远
本文档试图将Java程序员引入FP世界,同时解释Jambda中的一些(或大部分)function。
Apache Commons中有一些function性的代码。 参见例如Predicate接口。
谷歌番石榴function:
- 收集操作
- 并发结构(期货)
或者下载OpenJDK 8,以便在Java 8中使用Lambdaexpression式。其中,集合API将被调整为支持function样式。 请参阅http://macgyverdev.blogspot.se/2012/10/functional-programming-in-java.html以获取新收集API的示例,并与Guava,LambdaJ和FunctionalJava进行比较。;
这里提到了Scala,但是有更轻,更兼容Java的语言: Xtend 。 它编译为普通的Java并使用相同的types系统。 它有很好的Eclipse支持。 您可以在单个项目中混合.java
和.xtend
文件。
示例代码:
def static void main(String[] args) { val s = #[1,2,3].map[it+43].join(", ") println(s); }
尽pipeFunctional Java是最受欢迎的,但是我build议你尝试Google guava lib。