7

Java でファンクター (関数オブジェクト) を使用することに興味があります。簡単なグーグル検索で、次の 3 つのパッケージが見つかりました。

そして3つのうち、JGAが最高のデザインを持っているように見えました. しかし、実際に 1 つまたは複数のパッケージを使用したことがある他のユーザーは、これらの (およびおそらく他の) ファンクター パッケージの長所と短所についてより多くの洞察を提供できるのではないかと思います。

4

4 に答える 4

8

マンゴー

0、1、および 2 引数関数のインターフェイスを提供します。Java ジェネリックを使用します。関数を操作するための幅広いアルゴリズム。

JGA

0、1、2、および任意の数の引数関数のクラスを提供します。ドメイン オブジェクトはこれらをサブクラス化します。Java ジェネリックを使用します。幅広いアルゴリズム。JFXG (Java Functor eXpression Grammar) が含まれています。これは、任意の複雑なファンクターを簡単に作成できるようにすることを目的とした解析済み言語です。関数を操作するための複数のアルゴリズムを提供します。

Apache コモンズ ファンクター

0、1、および 2 引数の関数と、0、1、および 2 引数のプロシージャ (値を返さない) のインターフェイスを提供します。Java ジェネリックを使用します。幅広いアルゴリズム。

Google Guava (以前は Google コレクション)

単一引数関数の Function および Predicate インターフェイスを提供します。Java ジェネリックを使用します。関数を結合するための構成メソッドのみを提供します。かなり基本的です。

ファンクショナルJ

0、1、2、および任意の数の引数関数のインターフェイスとクラスを提供します。Java ジェネリックを使用します。既存のメソッドは、提供されている関数リフレクション クラスを介して関数に変換できます。

于 2009-10-17T02:55:23.357 に答える
4

関数オブジェクトはファンクターではないと言って、誰かを怒らせたりしないことを願っています。ウィキペディアでファンクターを調べてください。そして、この用語の乱用はやめてください。

于 2010-08-21T01:39:29.127 に答える
3

Google Collections LibraryFunctionは、同様のインターフェイスを提供します (ただし、おそらくそれほど深くはありません)。

于 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 ファンクターとの互換性のために設計された他の 3 つのファンクターも含まれています。そして、すべてを便利にするために、不変の Iterable 型 (すべての配列と Iterable から構築可能) は、メソッド チェーン、遅延評価、およびフィルター、マップ、フォールドなどの関数プロジェクションを備えています。

長所: シンプルでありながら効果的であり、fp の精神を損なう複雑なタイプの階層はありません。
短所: 新しく、まだ戦闘テストされていません。

于 2009-12-21T18:35:15.153 に答える