LINQ的Java等价物是什么?
当前回答
您可以使用lambdaj库以更易读的方式选择集合中的项目(以及更多)
https://code.google.com/archive/p/lambdaj/
它比Quaere库有一些优势,因为它不使用任何魔法字符串,它完全是类型安全的,在我看来,它提供了一个更可读的DSL。
其他回答
有一个叫做quaere的项目。
这是一个Java框架,它增加了查询集合的能力。
注:根据作者的说法,该项目已不再维护。
您可以使用lambdaj库以更易读的方式选择集合中的项目(以及更多)
https://code.google.com/archive/p/lambdaj/
它比Quaere库有一些优势,因为它不使用任何魔法字符串,它完全是类型安全的,在我看来,它提供了一个更可读的DSL。
对于LINQ(LINQ to Objects),Java 8将有类似的功能,请参见Project Lambda。
它具有Enumerable的LINQ to Objects扩展,如填充。但对于更复杂的LINQ,如表达式和ExpressionTree(如果LINQ to SQL和其他LINQ提供程序希望提供优化和真实的内容,则需要这些),目前还没有任何等效的,但我们可能会在未来看到:)
但我认为未来在Java上不会有类似声明式查询的东西。
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的博客。
有一个非常好的图书馆,你可以用来做这个。
位于此处:https://github.com/nicholas22/jpropel-light
Lambdas要到Java8才能使用,所以使用它有点不同,感觉不太自然。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 如何检查IEnumerable是否为空或空?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder