LINQ的Java等价物是什么?


当前回答

也许不是你所希望的答案,但如果你的代码的某些部分需要在集合上做大量工作(搜索、排序、过滤、转换、分析),你可以考虑用Clojure或Scala编写一些类。

由于其功能性,使用集合是他们最擅长的。我对Scala没有太多经验,但使用Clojure,您可能会发现一个更强大的Linq,一旦编译,您将生成的类将与其他代码库无缝集成。

其他回答

听起来大家在这里谈论的Linq只是LinqToObjects。我认为,它只提供了今天已经可以用Java实现的功能,但语法非常难看。

我认为Linq在.Net中的真正优势在于,lambda表达式可以在需要委托或表达式的上下文中使用,然后将其编译为适当的形式。这使得LinqToSql(或LinqToObjects以外的任何东西)这样的东西能够工作,并允许它们具有与LinqToObject相同的语法。

看起来上面提到的所有项目都只提供LinqToObjects的功能。这让我觉得LinqToSql类型的功能对于Java来说还没有出现。

与2014年一样,我终于可以说LINQ终于在java8中出现了。因此,不再需要寻找LINQ的替代品。

Lambdas现在以JSR-335的形式在Java8中提供-用于JavaTM编程语言的Lambda表达式

更新:JDK8现已发布,其中包含lambda项目。值得一提的是,目前仍然是MEAP的Java 8 in Action。

阅读Brian Goetz关于lambdas的文章,了解如何在JDK8中实现lambdas,同时了解流、内部迭代、短路和构造函数引用。。还要查看上面的JSR以获得更多示例。

我写了一篇关于在JDK8中使用lambdas的一些优点的博客,名为the Power of the Arrow,NetBeans 8也非常支持将构造转换为JDK8,我也写了一个关于使用NetBeans迁移到JDK8的博客。

只需添加另一个备选方案:Java6确实有一个使用javax.persistence.ccriteria包的类型安全数据库查询解决方案。

尽管我必须说,这不是真正的LINQ,因为使用LINQ可以查询任何IEnumerable。

有一个叫做quaere的项目。

这是一个Java框架,它增加了查询集合的能力。

注:根据作者的说法,该项目已不再维护。