Другой функциональный подход.
Сначала создайте метод построителя предикатов для обязательной проверки поля:
public static <T, F> Predicate<T> hasRequiredValue(Function<T, F> fieldGetter) {
return fieldGetter.andThen(Objects::nonNull)::apply;
}
И немного измените getFullName
:
public Optional<String> getFullName(Person person) {
return Optional.ofNullable(person)
.filter(hasRequiredValue(Person::getFamilyName))
.filter(hasRequiredValue(Person::getFirstName))
.map(p -> p.getFirstName() + " " + p.getFamilyName());
}
Затем используйте его следующим образом:
Person person = ...
String fullName = getFullName(person).orElse("Invalid");