У меня есть метод, возвращающий коллекцию товаров:
Collection<Product> getProducts() { ... }
На каждый товар может быть гарантия.Но это не обязательно.
interface Product {
Optional<Guarantee> getGuarantee();
}
Теперь мне нужно просмотреть все продукты и проверить, не истек ли срок гарантии.Не просроченные должны быть собраны в список.
Вот что я делаю:
List<Optional<Guarantee>> optionalGar = getProducts().stream()
.map(f -> f.getGuarantee()).collect(Collectors.toList());
List<Guarantee> gar = optionalGar.stream()
.map(op -> op.orElse(null))
.filter(Objects::nonNull)
.filter(g -> !g.hasExpired())
.collect(Collectors.toList());
Есть ли способ избежать использования .orElse(null)
?
(Замена на op.get()
вызовет исключение в случае, если необязательный параметр пуст)
PS: я могу свободно выбирать между Java 8 и Java 9, поэтому оба решения(не уверен, что будет иначе) добро пожаловать