Java-эквивалент предложения Where в С# Linq
Я могу сделать это в С#:
int CheetahNumber = 77;
Animal Cheetah = Model.Animals
.Where(e => e.AnimalNo.Equals(CheetahNumber))
.FirstOrDefault();
Например, в Java у меня есть ArrayList<Animal> Animals
Как я могу запросить такой ArrayList? Спасибо.
Ответы
Ответ 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;
}
Ответ 3
Несмотря на то, что Java не предоставляет вам LINQ равные конструкции, но вы можете достичь некоторого уровня, какие операции LINQ с потоком Java 8 создаются.
например, один
List<String> items = new ArrayList<String>();
items.add("one");
items.add("two");
items.add("three");
Stream<String> stream = items.stream();
stream.filter( item -> item.startsWith("o") );
Взгляните на поток java8