Java-здесь. Мне нужно найти два список POJOs для строки и хочу, чтобы правильно использовать поток / факультативную API.
Если имя появляется в первом списке (» lunches
«) , то я хочу , чтобы вернуть дополнительный содержащий его. В противном случае, если имя появляется во втором списке (» dinners
«) , то я хочу , чтобы вернуть дополнительный содержащий его. В противном случае я хочу вернуться , Optional.empty()
если имя не существует в любом списке. Моя лучшая попытка до сих пор:
public class Restaurant {
private String id;
private String name;
private List<Food> lunches;
private List<Food> dinners;
public Optional<Food> findFoodByName(String name) {
return Optional.of(lunches.stream()
.filter(food -> food.getName()
.equalsIgnoreCase(name))
.findFirst())
.orElse(dinners.stream()
.filter(food -> food.getName()
.equalsIgnoreCase(name))
.findFirst());
// .orElse(null); TODO: how to return empty optional if neither in 'lunches' nor 'dinners'?
}
}
Может кто-нибудь помочь мне пересечь финишную черту здесь?
Объединить оба списка , используя Stream.of
и проверить элемент или возвратаOptional.empty()
Stream.of(lunches, dinners)
.flatMap(List::stream)
.filter(s -> s.getName()
.equalsIgnoreCase(name))
.findFirst();
Согласно предложению от @Holger вы можете также использовать Stream.concat
для Concat два потока , а затем проверить элемент
Stream.concat(lunches.stream(), dinners.stream())
.filter(s -> s.getName()
.equalsIgnoreCase(name))
.findFirst();