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。

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