Java 相当于 C# Linq 中的 Where Clause

2022-09-01 09:31:06

我可以在C#中执行此操作:

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

例如,在Java中,我有ArrayList<Animal> Animals

如何查询这样的数组列表?谢谢。


答案 1

Java 8 引入了 Stream API,它允许与 Linq 中的结构类似的构造。

例如,您的查询可以表示为:

int cheetahNumber = 77;

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

如果存在默认值,您显然需要锻炼,在这种情况下这似乎很奇怪,但是我已经展示了它,因为这就是您问题中的代码所做的。


答案 2

您可以使用流进行尝试:

public String getFirstDog(List<Animal> animals) {
    Animal defaultDog = new Dog();
    Animal animal = animalNames.stream(). //get a stream of all animals 
        filter((s) -> s.name.equals("Dog")).findFirst(). //Filter for dogs and find the first one
        orElseGet(() -> defaultDog ); //If no dog available return an default animal.
                                        //You can omit this line.
    return animal;
}

推荐