Я хочу переписать следующую логику в функциональном стиле: т.е. в одну строку, используя map
, filter
, ifPresent
, orElse
, orElseGet
, orElseThrow
и т. д.
String id;
if (entity.legacyIndicator().isPresent()) { // field is an Optional<Foo>
if (entity.legacyId().isPresent()) { // field is an Optional<Long>
id = entity.legacyId().toString(); // e.g. id = '01234567'
} else {
throw new IOException("No ID found.");
}
} else {
if (entity.newId().isPresent()) { // field is an Optional<UUID>
id = entity.newId().toString(); // e.g. id = '01234567-89ab-cdef-0123-456789abcdef'
} else {
throw new IOException("No ID found.");
}
}
Основная проблема для меня в том, что legacyId()
и newId()
- это разные типы.Как мне «объединить» обе ветви, учитывая, что я, как программист, знаю, что они оба совместно используют isPresent()
и toString()
, хотя и не имеют общего интерфейса?
Я отредактирую этот вопрос наилучшим образомпопытка, в ближайшее время, так как я все еще работаю над тем, что я могу.Но я совершенно туп на объединении ветвей.