2011-01-23 5 views
10

最近C#からJavaに移行しました。しかし、私はひどくラムダ式やIEnumerableのようなものを見逃しています.Foreach of C#。 私はJavaでラムダ式ライブラリを探しています。Javaの.NETのラムダ式

LambdaJよりも優れたライブラリがありますか?

また、Javaプログラムで直接inlinableですか?つまり、Java関数でクロージャーコードを混在させることができますか? Javaで

+0

おもしろいことにC#は 'IEnumerable.Foreach'と一緒に出荷されません – Gabe

+2

@Gabe - あなたは正しいところです。私は行動を取るコレクションの取り扱い方法を意味しました。リスト .Foreach/Array.ForeachまたはIenumerable .Allなど。 – Fakrudeen

答えて

13

Java 8はネイティブにラムダをサポートしている可能性があります。これまでは、匿名の内部クラスとgoogle-guavaのようなライブラリの組み合わせを使用することができます。以下は

またはそれ以上に見ることができます他のライブラリには、Googleグアバライブラリが含まれていScala

+0

私はラムダ式がマイクロソフトによって特許取得されているということは一つもありません。 Javaが使えるチャンスは何ですか? – hardywang

+1

私はそれを読んだときに笑った - 見つかった:http://www.google.com/patents/US20070044083 ...ラムダ式を持つ最初の言語にC#は近くない。特許は、「誰もが使用したこのことをして訴訟を起こしたくない」というばかげたものの1つでなければなりません。 – Dale

3

同等のforeachループはこの

List<Foo> fooList = // some list containing foos 
for (Foo foo : fooList){ 
    // do stuff 
} 

のように構成されているJavaのには、ラムダ式を使用すると、彼らはクロージャを追加しているJava8まで待つことができますただし場合、ありません。あなたが得ることができる最も近いのはanonymous inner classesです。

+0

ありがとう - しかし、私はC#のforeachキーワードに相当するものではありませんでした。私はSomeCollection.ForEach(閉鎖)を意味しました。答えの後半部分は役に立ちますが、回答は役に立ちます。内部クラスは冗長です。 – Fakrudeen

3

見ているFunctionおよびPredicateラムダのような機能をエミュレートするために使用できるクラス。上記のkgradに言及すると、それぞれのインスタンスの匿名インスタンスを作成できます。

http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/base/Function.html
http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/base/Predicate.html

あなたは簡単にこれらのあなたのようなクラスを書くことができますが、グアバはイテラブルのすべての異なる種類を変換するか、フィルタリングのようなものを行うための関数と述語を利用するヘルパーメソッドの多くが含まれていますhttp://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Iterables.html

注:パンゲアは既に上記のGoogle Guavaへのリンクを投稿していますが、私は既にこの投稿を書き始めており、リンクを提供することはまだ有用であると考えていました。