У меня есть класс, который может содержать несколько дополнительных идентификаторов, класс выберет первый доступный и вернет его на вызывающего абонента. Что -то вроде ниже. < /P>
Optional
homePhone;
Optional mobilePhone;
Optional emergencyPhone;
Phone getBestPhone() {
return homePhone.map(p -> p)
.orElse(mobilePhone.map(p -> p)
.orElse(emergencyPhone.map(p -> p)
.orElseThrow(() -> new IllegalArgument("No valid phone")))));
}
< /code>
Я хотел бы использовать дополнительные методы, такие как Map и Orelse, но в этом случае это приводит к слишком много гнездования. Два других параметра псевдокода могут быть. < /P>
Phone getBestPhone() {
homePhone.ifPresent(p -> { return p; });
mobilePhone.ifPresent(p -> { return p; });
emergencyPhone.ifPresent(p -> { return p; });
throw new IllegalArgument("...");
}
< /code>
Phone getBestPhone() {
return FirstPresent(homePhone, mobilePhone, emergencyPhone);
}
< /code>
Are there any better ways that the existing method I have? I'm very tempted to avoid the nesting by doing vanilla isPresent() checks.
Подробнее здесь: https://stackoverflow.com/questions/652 ... -pick-best