7

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

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

4

4 回答 4

8

芒果

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

JGA

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

Apache Commons 函子

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

谷歌番石榴(谷歌收藏)

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

功能J

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

于 2009-10-17T02:55:23.357 回答
4

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

于 2010-08-21T01:39:29.127 回答
3

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

于 2009-03-16T18:17:52.367 回答
2

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

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

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

于 2009-12-21T18:35:15.153 回答