web-dev-qa-db-ja.com

Javaの関数型プログラミング

Javaの関数型プログラミングに適したライブラリはありますか?

Predicate および List.Find() (静的メソッドとして)のようなものを探しています。実装するのは複雑ではありませんが、ここで再利用可能なライブラリを見つけるといいでしょう。

59
ripper234

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}  

[〜#〜] edit [〜#〜]

lambdaj も確認してください。

さらに編集する

BGGAは完全にオプションです。より良い構文になります。

44
dfa

Scala は、Javaと完全に互換性のある関数型プログラミング言語です。 =(JVMを介して実行)。オブジェクト指向と機能のテクニックの美しいミックスと、Java Generics and Concurrencyの多くの改良点を提供します。 Javaを置き換える可能性があります。

29

Javaライブラリ

すでにあなたのために脚注を行い、不可解なものを隠すことによって、これを行うのを助けることができるライブラリがあります:

成熟した/確立された図書館

より不明瞭/実験的なライブラリ

これらにより、FP対応言語に期待されるように、より機能的なアプローチと、おそらくより馴染みのある構文とセマンティクスを使用してJavaコードを記述できます。

JVM言語

そして、明らかに、Javaの上に関数型言語をimplementationできます。これをFP言語として使用できます。これは、あなたが要求したものよりも少し高いレベルの抽象化ですが、比較的コンテキスト内です(ただし、ここに少し、付与されます)。

たとえば、チェックアウト:

かなり成熟した言語

成熟度の低い言語または不明瞭な言語

参考文献

次の記事やビデオを読んだり見たりすることもできます。


自分の P.SE からの回答 " Javaで関数型プログラミングは可能ですか? "

27
haylem

Googleコレクション には、機能的なプログラミングスタイルのユーティリティメソッドが豊富に用意されています。興味のあるクラスには、イテラブル、イテレータ、関数、関数などがあります

また、コレクションクラスも多数あります。

13
Chi

Functional Java は一見の価値があり、 FunctionalJ はもう1つです。

12
mikej

純粋なJavaソリューションが必要な場合はlambdajをチェックしてください。

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

DSLスタイルでクロージャーを定義して使用する可能性に加えて、クロージャーやループを明示的に記述することなく、機能的な方法でコレクションを操作することもできます。

7
Mario Fusco

または、OpenJDK 8をダウンロードして、Lambda式をJava 8になるように試してください。特に、コレクションAPIは機能的なスタイルをサポートするように調整されています。 http://macgyverdev.blogspot.se/2012/10/functional-programming-in-Java.html 新しいコレクションAPIの例とGuava、LambdaJ、FunctionalJavaとの比較。

4
Johan Norén

Apache Commonsには、機能的なコードがいくつかあります。たとえば、 Predicate インターフェイスを参照してください。

4
MatrixFrog

Google Guava 機能があります:

  • 収集操作
  • 並行性の構造(将来)
4
thSoft

ここでScalaについて言及しましたが、もっと軽くてもっとたくさんありますJava互換性のある言語: Xtend 。それはコンパイルして平野Java同じ型システム。Eclipseの優れたサポートがあります。.Javaおよび.xtendファイルを1つのプロジェクトに。

サンプルコード:

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

Jambda は別のFPライブラリです。 ドキュメント から:

Jambdaは、関数型プログラミング(FP)のツールと概念をJava(TM)の世界に提供する試みです。

目標は次のとおりです。

  • Javaプログラマーに表現力豊かなFPコンストラクトを提供する
  • Java FP-worldへのプログラマーのための橋渡しをする
  • Javaおよびジェネリックをどこまで拡張できるかを確認するには

このドキュメントは、JavaプログラマーをFP世界に紹介すると同時に、Jambdaの機能の一部(またはほとんど)を説明する試みです。

4
Johan Kullbom

Functional Javaが最も一般的ですが、Google guava libを試してみることをお勧めします。

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

2
Amit Mutreja