マッピング関数 (lisp の mapcar など) を提供するライブラリを Java で作成した人はいますか?
この投稿と他のいくつかの投稿 (この投稿、この投稿など)を見ましたが、悲しいことに、主流および/または使用可能と見なすことができるものは何もありませんでした。
マッピング関数 (lisp の mapcar など) を提供するライブラリを Java で作成した人はいますか?
この投稿と他のいくつかの投稿 (この投稿、この投稿など)を見ましたが、悲しいことに、主流および/または使用可能と見なすことができるものは何もありませんでした。
いくつかあります。それらは通常、LISP への参照ではなく、「Java での関数型プログラミング」ライブラリのようなものとして説明されます。
私の会社では、関数型プログラミングのドルイド僧は、優先ライブラリとしてFunctional Javaに落ち着きましたが、 Guavaの関数型の規定を好む重要かつ声高な少数派がいます。
Guava は非常に主流で人気のあるライブラリです。それはしっかりと「誰もクビにならなかった」カテゴリーに入っています。FJ はあまり知られていないかもしれませんが、私たちはとても楽しく使っています。私たちはそれを改善するのを助けることができるようにそれをフォークしました.
それでは、Java 8 を楽しみにしていてください。これには Project Lambda が含まれており、クロージャーのような匿名クラスの構文がはるかに優れています。†</sup> 例:
Iterable<String> strs = ...
Iterable<String> downCased = strs.map(s -> s.toLowerCase());
1 つのメソッドを持つ任意のインターフェース (または 1 つの抽象メソッドを持つ抽象クラス) は、Guava のFunction
andを含むこの構文を使用できますPredicate
(Java 8 には独自のMapper
andPredicate
インターフェースがあるため、これらはそのまま使用できます)。この場合Iterable.map
は、 と呼ばれる新しいインターフェイス タイプを使用する新しい拡張メソッドですMapper
。
Java 8 ラムダの例をもっと知りたい場合は、質問してください。
† 匿名クラスの通常のすべての制限が引き続き適用されます。これには、ローカル自由変数が「事実上最終的」でなければならないことが含まれます。つまり、変数に として明示的にタグを付ける必要はありませんがfinal
、値を変更することはまだ許可されていません。