LINQ的Java等价物是什么?
当前回答
HQL(Hibernate查询语言)与.Net中的Linq非常相似
其他回答
也许不是你所希望的答案,但如果你的代码的某些部分需要在集合上做大量工作(搜索、排序、过滤、转换、分析),你可以考虑用Clojure或Scala编写一些类。
由于其功能性,使用集合是他们最擅长的。我对Scala没有太多经验,但使用Clojure,您可能会发现一个更强大的Linq,一旦编译,您将生成的类将与其他代码库无缝集成。
Java LINQ to SQL实现。与.NET LINQ相比,提供了完整的语言集成和更大的功能集。
有一个替代的解决方案,库利选择。
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();
你可以试试我的图书馆CollectionsQuery。它允许在对象集合上运行类似LINQ的查询。您必须传递谓词,就像在LINQ中一样。如果您使用的是java6/7,则必须对接口使用旧语法:
List<String> names = Queryable.from(people)
.filter(new Predicate<Person>() {
public boolean filter(Person p) {
return p.age>20;
}
})
.map (new Converter<Person,String>() {
public Integer convert(Person p) {
return p.name;
}
})
.toList();
您也可以在Java8中使用它,或者在带有RetroLambda和它的gradle插件的旧java中使用它。然后您将拥有新的花式语法:
List<String> names = Queryable.from(people)
.filter(p->p.age>20)
.map (p->p.name)
.toList();
如果您需要运行DB查询,那么可以查看JINQ,如上所述,但RetroLambda无法对其进行反向移植,因此无法使用序列化的Lambda。
JaQu是Java的LINQ等价物。虽然它是为H2数据库开发的,但它应该适用于任何数据库,因为它使用JDBC。
推荐文章
- 如何格式化Joda-Time DateTime仅为mm/dd/yyyy?
- 如何在POM.xml中引用环境变量?
- 如何在android中复制一个文件?
- 将整数转换为字符串,以逗号表示千
- 接口方法的最终参数-有什么意义?
- Java中的@UniqueConstraint注释
- 如何在清洁模式下运行eclipse ?如果我们这样做会发生什么?
- 获取java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory异常
- Java中的正则表达式命名组
- c#和Java的主要区别是什么?
- 什么是NullPointerException,我如何修复它?
- 在Java中使用“final”修饰符
- 无法在Flutter上找到捆绑的Java版本
- 如何在Kotlin解析JSON ?
- 如何在新的材质主题中改变背面箭头的颜色?