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);
}

其他回答

无耻的自插塞:你可以随时使用https://github.com/amoerie/jstreams

适用于Java 6及以上版本,非常适合Android开发。

它看起来很像Scala运算符、lodash、C#LINQ等。

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

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

Java LINQ to SQL实现。与.NET LINQ相比,提供了完整的语言集成和更大的功能集。

一位匿名用户提到了另一个,Diting:

Diting是一个类库,它通过可链接方法和匿名接口(如.NET中的Linq)提供对集合的查询功能。与大多数其他使用静态方法的集合库不同,Diting提供了一个核心Enumerable类,该类包含可链接方法以实现对集合或数组的查询。支持的方法:any、cast、contact、contains、count、distinct、elementAt、except、first、firstOrDefault、groupBy、interset、join、last、lastOrDefault、ofType、orderBy、orderByDescending、reverse、select、selectMany、single、singleOrDefault、skip、skipWhile、take、takeWhile、toArray、toArrayList、union,其中

您可以使用scala,它在语法上类似,实际上可能比linq更强大。