Exemple: Filtrer une liste de produits dont le prix est basé sur fromPrice et toPrice. Ils pourraient soit être fournis, soit juste un.Java 8: Diffuser et filtrer en fonction des conditions optionnelles
- Trouvez tous les produits dont le prix est supérieur à fromPrice
- Trouvez tous les produits dont le prix est inférieur à toPrice
- Trouvez tous les produits dont le prix est entre fromPrice et toPrice
Produit:
public class Product {
private String id;
private Optional<BigDecimal> price;
public Product(String id, BigDecimal price) {
this.id = id;
this.price = Optional.ofNullable(price);
}
}
PrixPrix:
public class PricePredicate {
public static Predicate<? super Product> isBetween(BigDecimal fromPrice, BigDecimal toPrice) {
if (fromPrice != null && toPrice != null) {
return product -> product.getPrice().isPresent() && product.getPrice().get().compareTo(fromPrice) >= 0 &&
product.getPrice().get().compareTo(toPrice) <= 0;
}
if (fromPrice != null) {
return product -> product.getPrice().isPresent() && product.getPrice().get().compareTo(fromPrice) >= 0;
}
if (toPrice != null) {
return product -> product.getPrice().isPresent() && product.getPrice().get().compareTo(toPrice) <= 0;
}
return null;
}
}
Filtres:
return this.products.stream().filter(PricePredicate.isBetween(fromPrice, null)).collect(Collectors.toList());
return this.products.stream().filter(PricePredicate.isBetween(null, toPrice)).collect(Collectors.toList());
return this.products.stream().filter(PricePredicate.isBetween(fromPrice, toPrice)).collect(Collectors.toList());
Y at-il un moyen d'améliorer mon prédicats au lieu d'avoir le contrôle sinon nul? Tout ce qui peut être fait avec des options?
La première phrase suffit pour gagner +1 de moi. – Jubobs
Merci. Cela semble bon. mais j'obtiens une erreur de compilation ici: Facultatif price = product.getPrice(); ne peut pas résoudre le symbole 'produit' –
Oh oui, désolé, mon code n'a pas de sens. Laisse-moi le réparer. –