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流