【发布时间】:2010-11-19 00:47:03
【问题描述】:
【问题讨论】:
标签: java functional-programming
【问题讨论】:
标签: java functional-programming
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 是一种与 Java 完全兼容的函数式编程语言(通过 JVM 运行)。它提供了面向对象和函数式技术的完美组合,以及在泛型和并发方面对 Java 的许多改进。 Some even say it could replace Java.
【讨论】:
有一些库可以帮助您做到这一点,它们已经为您完成了繁琐的工作并隐藏了神秘的东西:
这些将允许您使用更实用的方法以及可能更熟悉的语法和语义来编写 Java 代码,正如您对 FP 能力的语言所期望的那样。在合理的范围内,就是这样。
显然,您可以在 Java 之上实现一种函数式语言。这样您就可以将其用作您的 FP 语言。这比您要求的抽象级别更高,但相对在上下文中(尽管我在这里作弊了一点,当然)。
例如,退房:
您可能还想阅读或观看这些文章或视频:
摘自我对 "Is Functional Programming Possible in Java?"
的P.SE 回复【讨论】:
Google collections 有很多函数式编程风格的实用方法可供选择。 一些感兴趣的类是 Iterables、Iterators、Function、Functions 等
它还有一堆集合类!
【讨论】:
Functional Java 值得一看,FunctionalJ 是另一个。
【讨论】:
如果您想要纯 Java 解决方案,请查看 lambdaj
http://code.google.com/p/lambdaj/
除了可以在 DSL 样式中定义和使用闭包之外,它还允许以函数式方式操作集合,而无需显式编写闭包或循环
【讨论】:
Jambda 是另一个 FP 库。来自documentation:
Jambda 试图提供 带有工具和概念的 Java(TM) 世界 来自函数式编程(FP)。
目标有几个:
- 为 Java 程序员提供富有表现力的 FP 结构
- 为 Java 程序员进入 FP 世界提供一座桥梁
- 看看 Java 和泛型可以扩展多远
这个 文件是试图介绍 Java 程序员进入 FP 世界, 同时解释一些(或 大多数)Jambda 中的功能。
【讨论】:
Apache Commons 中有一些功能性代码。例如,参见Predicate 接口。
【讨论】:
Google Guava 有功能:
【讨论】:
或者下载 OpenJDK 8 以尝试 Lambda 表达式在 Java 8 中的表现方式。其中,集合 API 已调整为支持函数式样式。看 http://macgyverdev.blogspot.se/2012/10/functional-programming-in-java.html 有关新集合 API 的示例以及与 Guava、LambdaJ 和 FunctionalJava 的比较。
【讨论】:
这里提到了 Scala,但还有更轻量级且更兼容 Java 的语言:Xtend。它编译为纯 Java 并使用相同的类型系统。它有很好的 Eclipse 支持。您可以在一个项目中混合使用 .java 和 .xtend 文件。
示例代码:
def static void main(String[] args) {
val s = #[1,2,3].map[it+43].join(", ")
println(s);
}
【讨论】:
虽然函数式 Java 是最受欢迎的,但我建议您尝试 Google guava lib。
【讨论】: