Java中与C# Linq中的Where子句相对应的是什么?

33 浏览
0 Comments

Java中与C# Linq中的Where子句相对应的是什么?

我可以用C#来做到这一点:

int CheetahNumber = 77;
Animal Cheetah = Model.Animals
   .Where(e => e.AnimalNo.Equals(CheetahNumber))
   .FirstOrDefault();

例如在Java中我有ArrayList Animals

我该如何查询这样的ArrayList呢?谢谢。

0
0 Comments

问题出现的原因:

Java中没有像C#的LINQ一样提供等效的构造,所以无法直接使用LINQ的语法来实现类似的操作。

解决方法:

但是,你可以使用Java 8的流(Stream)构造来实现一些类似LINQ的操作。

例如:

List items = new ArrayList();
items.add("one");
items.add("two");
items.add("three");
Stream stream = items.stream();
stream.filter(item -> item.startsWith("o"));

你可以参考Java 8的流(Stream)文档:java8 stream

另外,如果你想访问对象(item)的属性,比如itemID、itemName等,你可能需要使用对象的getter方法来实现。

0
0 Comments

问题原因:在C#的Linq中,可以使用Where子句来过滤集合中的元素,但是在Java中没有类似的语法。

解决方法:可以使用Java 8中的流(Stream)来实现类似的功能。上述代码中的getFirstDog方法接收一个Animal对象的集合作为参数,通过使用流的filter方法来过滤出符合条件的Dog对象,并使用findFirst方法获取第一个满足条件的Dog对象。如果没有符合条件的Dog对象,则通过orElseGet方法返回一个默认的Animal对象(在代码中使用了一个名为defaultDog的Dog对象作为默认值)。最后,返回获取到的Animal对象。

整理成文章如下:

Java中的流(Stream)可以实现类似于C# Linq中的Where子句的功能。下面是一个示例代码,展示了如何使用流来实现类似的功能。

public String getFirstDog(List animals) {
    Animal defaultDog = new Dog();
    Animal animal = animalNames.stream() // 获取所有动物的流
        .filter((s) -> s.name.equals("Dog")) // 过滤出狗
        .findFirst() // 获取第一个满足条件的狗
        .orElseGet(() -> defaultDog); // 如果没有狗,则返回默认的动物(可以省略此行)
    return animal;
}

在上述代码中,getFirstDog方法接收一个Animal对象的集合作为参数。首先,使用stream方法将集合转换为流对象。然后,使用filter方法过滤出名称为"Dog"的动物对象。接着,使用findFirst方法获取第一个满足条件的动物对象,如果没有符合条件的动物对象,则使用orElseGet方法返回一个默认的动物对象(在代码中使用了一个名为defaultDog的Dog对象作为默认值)。最后,返回获取到的Animal对象。

通过使用流的filter和findFirst方法,我们可以实现类似于C# Linq中的Where子句的功能。这种方法可以简洁地过滤出符合条件的对象,并且非常适用于处理大量数据的情况。

0
0 Comments

Java中的等效C# Linq的Where子句的问题是由于Java 8引入了Stream API,该API允许类似于Linq中的类似构造。解决方法是使用Stream API的filter()方法和findFirst()方法来实现。

在Java中,可以通过以下方式来表达查询:

int cheetahNumber = 77;
Animal cheetah = animals.stream()
  .filter((animal) -> animal.getNumber() == cheetahNumber)
  .findFirst()
  .orElse(Animal.DEFAULT);

需要注意的是,需要确定是否存在默认值,尽管在这种情况下似乎有点奇怪,但我之所以展示它,是因为这是您问题中的代码所做的。

有一个问题:我可以在Android上使用这个吗?

Stream API是在Java 8中引入的,而(在撰写本文时)尚未得到支持(请参见stackoverflow.com/questions/23318109/...)。

这里的默认值实际上是null-所有类类型的默认值。由于C#允许原始类型作为泛型类型参数(无需装箱!!),因此名称FirstOrDefault暗示对于值类型,您将获得除null之外的某些内容,例如对于int,0,对于struct,使用其默认(无参数)构造函数创建的该struct的实例。除非它是可为空的值类型,在这种情况下,您将再次获得null,因为实际上它相当于类Nullable

0