LINQ的Java等价物是什么?


当前回答

查看tiny-q。(请注意,您当前无法下载。)

下面是一个适用于上述链接的示例:

首先,我们需要一些数据的集合,比如一组字符串

String[] strings = { "bla", "mla", "bura", "bala", "mura", "buma" };

现在我们只选择以“b”开头的字符串:

Query<String> stringsStartingWithB = new Query<String>(strings).where(
    new Query.Func<String, Boolean>(){
        public Boolean run(String in) {
            return in.startsWith("b");
        }
    }
);

没有实际的数据被复制或类似的东西,一旦你开始迭代,它就会被处理:

for(String string : stringsStartingWithB ) {
    System.out.println(string);
}

其他回答

与2014年一样,我终于可以说LINQ终于在java8中出现了。因此,不再需要寻找LINQ的替代品。

参见SBQL4J。它是与Java集成的类型安全的强查询语言。允许编写复杂和多重嵌套查询。有很多运算符,Java方法可以作为构造函数在查询中调用。查询被转换为纯Java代码(在运行时没有反射),因此执行速度非常快。

编辑:到目前为止,SBQL4J是Java语言的唯一扩展,它提供了类似LINQ的查询功能。有一些有趣的项目,比如Quaere和JaQue,但它们只是API,而不是编译时具有强类型安全性的语法/语义扩展。

只需添加另一个备选方案:Java6确实有一个使用javax.persistence.ccriteria包的类型安全数据库查询解决方案。

尽管我必须说,这不是真正的LINQ,因为使用LINQ可以查询任何IEnumerable。

对于Java来说,并不是真正的“Linq to SQL”。但有点接近。查询DSL

对于LINQ(LINQ to Objects),Java 8将有类似的功能,请参见Project Lambda。

它具有Enumerable的LINQ to Objects扩展,如填充。但对于更复杂的LINQ,如表达式和ExpressionTree(如果LINQ to SQL和其他LINQ提供程序希望提供优化和真实的内容,则需要这些),目前还没有任何等效的,但我们可能会在未来看到:)

但我认为未来在Java上不会有类似声明式查询的东西。