【问题标题】:Functional Programming in Java [closed]Java中的函数式编程[关闭]
【发布时间】:2010-11-19 00:47:03
【问题描述】:

有没有好的Java函数式编程库?

我正在寻找 PredicateList.Find() 之类的东西(作为静态方法)。实现起来并不复杂,但如果能在这里找到一个可重用的库就好了。

【问题讨论】:

    标签: java functional-programming


    【解决方案1】:

    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 完全是可选的。它只是使语法更好。

    【讨论】:

    • 但是 BGGA 实际上并不是在 Java 中。所以这不会编译,对吧?
    • BGGA 可用作将 {int i => i + 42} 转换为 new F() { public Integer f(Integer i) {return i + 42; }}。后者将与任何旧的 Java 一起编译。
    • 对,确实有点郁闷
    • 另外,源代码可读可嵌入。我能够在没有完整库的情况下取出一些类并使用函数式 java。
    【解决方案2】:

    Scala 是一种与 Java 完全兼容的函数式编程语言(通过 JVM 运行)。它提供了面向对象和函数式技术的完美组合,以及在泛型和并发方面对 Java 的许多改进。 Some even say it could replace Java.

    【讨论】:

      【解决方案3】:

      Java 库

      有一些库可以帮助您做到这一点,它们已经为您完成了繁琐的工作并隐藏了神秘的东西:

      成熟/成熟的图书馆

      更多不知名/实验性图书馆

      这些将允许您使用更实用的方法以及可能更熟悉的语法和语义来编写 Java 代码,正如您对 FP 能力的语言所期望的那样。在合理的范围内,就是这样。

      JVM 语言

      显然,您可以在 Java 之上实现一种函数式语言。这样您就可以将其用作您的 FP 语言。这比您要求的抽象级别更高,但相对在上下文中(尽管我在这里作弊了一点,当然)。

      例如,退房:

      相当成熟的语言

      不太成熟或更晦涩的语言

      进一步阅读

      您可能还想阅读或观看这些文章或视频:


      摘自我对 "Is Functional Programming Possible in Java?"

      P.SE 回复

      【讨论】:

      • +1 优秀的“进一步阅读”链接!!!
      【解决方案4】:

      Google collections 有很多函数式编程风格的实用方法可供选择。 一些感兴趣的类是 Iterables、Iterators、Function、Functions 等

      它还有一堆集合类!

      【讨论】:

      • 该库现在被 Guava 取代。
      【解决方案5】:

      Functional Java 值得一看,FunctionalJ 是另一个。

      【讨论】:

      • 那么..哪一个?另外,对于我们当中的懒惰者,可以在没有 Java 闭包的情况下使用它们吗? (假设我只想要一个库,而不是强迫我使用不同的编译器)
      • Functional Java 只是一个库,但如果你想使用它,它可以使用 BGGA 闭包语法。
      【解决方案6】:

      如果您想要纯 Java 解决方案,请查看 lambdaj

      http://code.google.com/p/lambdaj/

      除了可以在 DSL 样式中定义和使用闭包之外,它还允许以函数式方式操作集合,而无需显式编写闭包或循环

      【讨论】:

      • LambdaJ 似乎比函数式java 更受欢迎。
      【解决方案7】:

      Jambda 是另一个 FP 库。来自documentation

      Jambda 试图提供 带有工具和概念的 Java(TM) 世界 来自函数式编程(FP)。

      目标有几个:

      • 为 Java 程序员提供富有表现力的 FP 结构
      • 为 Java 程序员进入 FP 世界提供一座桥梁
      • 看看 Java 和泛型可以扩展多远

      这个 文件是试图介绍 Java 程序员进入 FP 世界, 同时解释一些(或 大多数)Jambda 中的功能。

      【讨论】:

        【解决方案8】:

        Apache Commons 中有一些功能性代码。例如,参见Predicate 接口。

        【讨论】:

          【解决方案9】:

          Google Guava 有功能:

          • 收集操作
          • 并发构造(期货)

          【讨论】:

            【解决方案10】:

            或者下载 OpenJDK 8 以尝试 Lambda 表达式在 Java 8 中的表现方式。其中,集合 API 已调整为支持函数式样式。看 http://macgyverdev.blogspot.se/2012/10/functional-programming-in-java.html 有关新集合 API 的示例以及与 Guava、LambdaJ 和 FunctionalJava 的比较。

            【讨论】:

              【解决方案11】:

              这里提到了 Scala,但还有更轻量级且更兼容 Java 的语言:Xtend。它编译为纯 Java 并使用相同的类型系统。它有很好的 Eclipse 支持。您可以在一个项目中混合使用 .java.xtend 文件。

              示例代码:

              def static void main(String[] args) {
                  val s = #[1,2,3].map[it+43].join(", ")
                  println(s);
              }
              

              【讨论】:

                【解决方案12】:

                虽然函数式 Java 是最受欢迎的,但我建议您尝试 Google guava lib。

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

                【讨论】:

                  猜你喜欢
                  • 2010-11-06
                  • 2012-09-12
                  • 2020-03-27
                  • 2011-11-16
                  • 1970-01-01
                  • 2010-10-06
                  • 2010-12-06
                  • 2011-05-15
                  • 2023-03-20
                  相关资源
                  最近更新 更多