LINQ的Java等价物是什么?


当前回答

java中没有这样的功能。通过使用其他API,您将获得此功能。就像假设我们有一个包含名称和id的动物对象。我们有包含动物对象的列表对象。现在,如果我们想从列表对象中获取包含“o”的所有动物名称。我们可以编写以下查询

from(animals).where(“getName”,contains(“o”)).all();

上面的Query语句将列出名称中包含“o”字母的动物。更多信息请浏览以下博客。http://javaworldwide.blogspot.in/2012/09/linq-in-java.html

其他回答

有一个替代的解决方案,库利选择。

Coolection并没有假装是新的lambda,但是我们周围都是旧的遗留Java项目,这个库将对我们有所帮助。它的使用和扩展非常简单,只涵盖集合上最常用的迭代操作,例如:

from(people).where("name", eq("Arthur")).first();
from(people).where("age", lessThan(20)).all();
from(people).where("name", not(contains("Francine"))).all();

没有什么比LINQ for Java更好的了。

...

Edit

现在,在Java8中,我们介绍了StreamAPI,这在处理集合时是一种类似的事情,但它与Linq不同。

如果您正在寻找的是ORM,比如实体框架,那么您可以尝试Hibernate

:-)

有一个叫做quaere的项目。

这是一个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);
}

java中没有这样的功能。通过使用其他API,您将获得此功能。就像假设我们有一个包含名称和id的动物对象。我们有包含动物对象的列表对象。现在,如果我们想从列表对象中获取包含“o”的所有动物名称。我们可以编写以下查询

from(animals).where(“getName”,contains(“o”)).all();

上面的Query语句将列出名称中包含“o”字母的动物。更多信息请浏览以下博客。http://javaworldwide.blogspot.in/2012/09/linq-in-java.html