2011-01-23 65 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链接,但我已经开始写这篇文章,并认为它提供链接仍然很有用。