Давайте посмотрим на этот код «старой школы» (ну, в нем есть необязательный и var, так что не такой уж старый)
Код: Выделить всё
public Optional getValidSupplierAddress(Supplier supplier) {
var supplier = context.getAllSuppliers();
if (!supplier.hadRecentProjects) {
log.debug("supplier didn't have any recent projects");
return Optional.empty();
}
if (!supplier.validatedByBoardOfCommerce()) {
log.debug("supplier is not validated by board of commerce");
return Optional.empty();
}
var address = supplier.getAddress();
if (address == null) {
log.debug("no address specified for supplier");
return Optional.empty();
}
if (address.isPobox()) {
log.debug("address is not valid, no pobox allowed");
return Optional.empty();
}
return Optional.of(address);
}
Код: Выделить всё
public Optional getValidSupplierAddress(Supplier supplier) {
return Optional.of(supplier)
.filter(logOnFalse(Supplier::hadRecentProjects,
"supplier didn't have any recent projects"))
.filter(logOnFalse(Supplier::validatedByBoardOfCommerce,
"supplier is not validated by board of commerce"))
.map(supplier -> Optional.of(supplier.getAddress())
.filter(logOnFalse(Optional::isPresent,
"no address specified for supplier"))
.map(Optional::get)
.filter(logOnFalse(not(Address::isPobox),
"address is not valid, no pobox allowed"));
}
private Predicate logOnFalse(Predicate condition, String logStrOnFalse) {
return condition.or(x1 -> { log.debug(logStrOnFalse); return false; });
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... e-a-stream
Мобильная версия