LINQ的Java等价物是什么?


当前回答

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

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

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

其他回答

没有什么比LINQ for Java更好的了。

...

Edit

现在,在Java8中,我们介绍了StreamAPI,这在处理集合时是一种类似的事情,但它与Linq不同。

如果您正在寻找的是ORM,比如实体框架,那么您可以尝试Hibernate

:-)

有一个替代的解决方案,库利选择。

Coolection并没有假装是新的lambda,但是我们周围都是旧的遗留Java项目,这个库将对我们有所帮助。它的使用和扩展非常简单,只涵盖集合上最常用的迭代操作,例如:

from(people).where("name", eq("Arthur")).first();
from(people).where("age", lessThan(20)).all();
from(people).where("name", not(contains("Francine"))).all();

您可以使用lambdaj库以更易读的方式选择集合中的项目(以及更多)

https://code.google.com/archive/p/lambdaj/

它比Quaere库有一些优势,因为它不使用任何魔法字符串,它完全是类型安全的,在我看来,它提供了一个更可读的DSL。

既然Java8支持lambdas,就可以创建与LINQ非常相似的JavaAPI了。

Jinq是这些新的LINQ风格的Java库之一。

我是这个库的开发人员。它基于五年来使用字节码分析将Java转换为数据库查询的研究。类似于C#的D-LINQ是一个位于实体框架之上的查询层,Jinq能够充当JPA或jOOQ之上的一个查询层。它支持聚合、组和子查询。就连埃里克·梅杰(LINQ的创始人)也承认了金克。

一位匿名用户提到了另一个,Diting:

Diting是一个类库,它通过可链接方法和匿名接口(如.NET中的Linq)提供对集合的查询功能。与大多数其他使用静态方法的集合库不同,Diting提供了一个核心Enumerable类,该类包含可链接方法以实现对集合或数组的查询。支持的方法:any、cast、contact、contains、count、distinct、elementAt、except、first、firstOrDefault、groupBy、interset、join、last、lastOrDefault、ofType、orderBy、orderByDescending、reverse、select、selectMany、single、singleOrDefault、skip、skipWhile、take、takeWhile、toArray、toArrayList、union,其中