LINQ 是不是有 Java 等价物? [复制]
Posted
技术标签:
【中文标题】LINQ 是不是有 Java 等价物? [复制]【英文标题】:Is there a Java equivalent for LINQ? [duplicate]LINQ 是否有 Java 等价物? [复制] 【发布时间】:2012-06-04 10:22:46 【问题描述】:可能重复:What is the Java equivalent for LINQ?
有很多问题询问是否有 LINQ 的 Java 等效项。但他们中的大多数都错误地指出什么都没有。
【问题讨论】:
most of them are incorrectly specifying that there is nothing
- 那你为什么要问这个问题,如果你这么确定他们“错误地指定什么都没有”?
我来自 .NET 背景,我正在使用这个库。在研究这样的事情时,我所看到的只是“不,什么都没有”。因此,它适用于必须使用 Java 进行项目的其他人。
@Fredrik:这是acceptable and even encouraged。
@GregKopff 即使还有其他问题问同样的事情?难道他不能只回答其中一个问题,说其他答案是错误的吗?
@Pable 但这些已被回答和接受
【参考方案1】:
此库提供完整的 LINQ API:https://github.com/nicholas22/jpropel-light
它使用函数式构造实现这一点,并且还使用延迟执行。
// select names starting with j, using LINQ-style statements
new String[] "james", "john", "john", "eddie" .where(startsWith("j")).distinct().all(println());
【讨论】:
没有 lambda,没有雪茄。获取表达式并将它们分解为它们的组件,并将它们转换为复杂分层查询的 SQL 表达式的能力仍然完全缺失。 @DaveMorganTexas LINQ-to-SQL != LINQ. @EvanPlaice - 适当的术语是query expression
,而不是SQL expression
。如果 Dave 能够进行替换,他的评论将变得更加普遍适用,而不仅仅是在 SQL 领域
正如 What is the Java equivalent for LINQ? 中的 cmets 中所指出的,需要对 C# 和 .Net 框架进行更改——Lambda、扩展方法——并且只有 那时他们能够创建作为 LINQ 提供者的方法库。在他们对 Java 进行深度更改之前,所有“LINQ API”都将是浅薄的廉价模仿,附加的“装饰器”,最终仍然需要大量代码才能正确“解决”缺乏深度集成的问题在 LINQ 中。【参考方案2】:
我自己尝试过的另一个是 jaque:http://code.google.com/p/jaque/
【讨论】:
这是最新的吗?它说它使用 Java 7 闭包。虽然它们在 JDK 7 中没有闭包... 是的,这很奇怪。但它有where
、select
等常用方法。以上是关于LINQ 是不是有 Java 等价物? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Scala中IEnumerable LINQ等价物的图表? [复制]
Python 中 switch/case 的语法等价物是啥? [复制]