2011-01-23 60 views
10

我最近從C#移到Java [再]。但我很想念lambda表達式和IEnumerable.Foreach之類的東西。 所以我正在尋找Java中的lambda表達式庫。Java中的.NET的Lambda表達式

有沒有比LambdaJ更好的圖書館?

也是clojure直接inlinable在Java程序?那是我可以在Java函數中混合使用clojure代碼嗎?

+0

有趣...... C#甚至沒有附帶IEnumerable.Foreach` – Gabe 2011-01-23 18:39:20

+2

@加貝 - 你是對的迂腐點。我的意思是採取行動的收集處理方法。列表 .Foreach/Array.Foreach或Ienumerable 。All等 – Fakrudeen 2011-01-24 05:45:29

回答

3

Java中的等價foreach循環的結構是這樣

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

在Java中沒有lambda表達式,但是如果你能等到Java8他們將關閉。最近的你可以得到anonymous inner classes

+0

謝謝 - 但我不是指C#的foreach關鍵字的等價物。我的意思是SomeCollection.ForEach(閉包)。雖然答案稍後,答案的後面部分很有用。內部類是冗長的。 – Fakrudeen 2011-01-24 06:05:09

3

的谷歌番石榴庫包含其他庫和Predicate可用於模擬類lambda功能的類。正如上面提到的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

雖然你可以很容易地自己寫類,如這些,番石榴含有大量的利用功能和謂詞做這樣的事情轉化或過濾所有不同類型的iterables的輔助方法:http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common/collect/Iterables.html

注意:我意識到Pangea已經發布了上面的Google Guava鏈接,但我已經開始寫這篇文章,並認爲它提供鏈接仍然很有用。