Java 8 ici. Je dois rechercher deux listes de POJO pour une chaîne et que vous souhaitez utiliser correctement les API de flux / en option.
Si le nom apparaît dans la première liste ( » lunches
« ) , alors je veux revenir en option contenant. Sinon, si le nom apparaît dans la deuxième liste ( » dinners
« ) , alors je veux revenir en option contenant. Sinon , je veux revenir Optional.empty()
si le nom n'existant ni sur la liste. Ma meilleure tentative jusqu'ici:
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'?
}
}
aider quelqu'un peut me traverser la ligne d'arrivée ici?
Mélanger à la fois la liste à l' aide Stream.of
et vérifier l' élément ou de retourOptional.empty()
Stream.of(lunches, dinners)
.flatMap(List::stream)
.filter(s -> s.getName()
.equalsIgnoreCase(name))
.findFirst();
Selon la suggestion de @Holger vous pouvez également utiliser Stream.concat
pour concaténer deux cours d' eau, puis vérifier l' élément
Stream.concat(lunches.stream(), dinners.stream())
.filter(s -> s.getName()
.equalsIgnoreCase(name))
.findFirst();