LINQ 是不是有 Java 等价物? [复制]

Posted

技术标签:

【中文标题】LINQ 是不是有 Java 等价物? [复制]【英文标题】:Is there a Java equivalent for LINQ? [duplicate]LINQ 是否有 Java 等价物? [复制] 【发布时间】:2012-06-08 10:26:29 【问题描述】:

可能重复: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 框架进行更改——Lambdas、扩展方法——只有那时他们才能做到创建作为 LINQ 提供者的方法库。在他们对 Java 进行深度更改之前,所有“LINQ API”都将是浅薄的廉价模仿,附加的“装饰器”,最终仍然需要大量代码才能正确“解决”缺乏深度集成的问题在 LINQ 中。【参考方案2】:

我自己尝试过的另一个是 jaque:http://code.google.com/p/jaque/

【讨论】:

这是最新的吗?它说它使用 Java 7 闭包。虽然它们在 JDK 7 中没有闭包... 是的,这很奇怪。但它有whereselect等常用方法。

以上是关于LINQ 是不是有 Java 等价物? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Scala中IEnumerable LINQ等价物的图表? [复制]

LINQ 中的 SQL ISNULL 等价物?

LINQ中左外连接的等价物[重复]

Python 中 switch/case 的语法等价物是啥? [复制]

为啥在 LINQ 中使用 First 而不是 FirstOrDefault? [复制]

java中有没有类似LINQ的实现? [复制]