【问题标题】:Best Java Functor lib: JGA, commons functor, mango, or...?最佳 Java Functor lib:JGA、commons functor、mango 还是...?
【发布时间】:2009-03-16 18:09:58
【问题描述】:

我对在 Java 中使用仿函数(函数对象)很感兴趣。通过快速谷歌搜索,我找到了这 3 个包:

在 3 中,JGA 似乎拥有最好的设计。但我怀疑这里实际使用过一个或多个包的其他人可能能够就这些(可能还有其他)函子包的优缺点提供更多见解。

【问题讨论】:

  • 我知道这是一个相当古老的问题,但要对任何来到这里的人发表评论,应该注意 Java 8 及更高版本具有对广泛的函数式编程操作的内置库支持。

标签: java functor


【解决方案1】:

芒果

为 0、1 和 2 参数函数提供接口。使用 Java 泛型。用于处理函数的各种算法。

JGA

为 0、1、2 和任意数量的参数函数提供类。域对象是这些的子类。使用 Java 泛型。广泛的算法。包括 JFXG (Java Functor eXpression Grammar) - 一种经过解析的语言,旨在使创建任意复杂的仿函数变得容易。提供多种处理函数的算法。

Apache Commons 函子

为 0、1 和 2 参数函数以及 0、1 和 2 参数过程(不返回值)提供接口。使用 Java 泛型。多种算法。

Google Guava(曾是 Google 收藏)

为单参数函数提供函数和谓词接口。使用 Java 泛型。仅提供组合函数的 compose 方法。很基本。

功能性J

为 0、1、2 和任意数量的参数函数提供接口和类。使用 Java 泛型。现有方法可以通过提供的函数反射类转换为函数。

【讨论】:

    【解决方案2】:

    我希望我不会因为说函数对象不是函子而冒犯任何人。在维基百科上查找函子。请停止滥用这个术语。

    【讨论】:

      【解决方案3】:

      The Google Collections Library 提供了一个类似的Function 接口(尽管可能没有那么深入)。

      【讨论】:

        【解决方案4】:

        swensen.functional,http://www.codeproject.com/KB/java/FunctionalJava.aspx,由 Yours Truly 提供。

        提供封装 0 到 5 个参数函数 (FuncX) 和过程 (ActionX) 的单一方法通用接口。还包括一个 Predicate 仿函数(实现 Func2 的抽象类)和其他三个为与旧版 Comparator、Runnable 和 Callable 仿函数兼容而设计的。为了使这一切变得有用,一个不可变的 Iterable 类型(可从所有数组和 Iterables 构造)具有方法链接、惰性求值和功能投影(如过滤器、映射和折叠)。

        Pro:简单而有效,没有破坏 fp 精神的复杂类型层次结构。
        缺点:新的,尚未经过实战测试。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-12-24
          • 2012-01-29
          • 2011-11-05
          • 1970-01-01
          • 2013-11-15
          • 2015-05-13
          相关资源
          最近更新 更多