Java相当于C#Linq中的Where子句

我可以在C#中做到这一点:

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

例如在Java中,我有ArrayList Animals

我怎样才能查询这样的ArrayList? 谢谢。

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

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

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

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

您可以使用流来尝试:

 public String getFirstDog(List 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; } 

即使Java没有为您提供LINQ相同的构造,但您可以在某些级别上实现使用Java 8流构造的LINQ操作。

比如一个

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

看看java8流