Optional.ifPresentOrElse()
Trate os casos de presente e vazio do Optional em uma única chamada.
Comparação de Código
✕ Java 8
Optional<User> user = findUser(id);
if (user.isPresent()) {
greet(user.get());
} else {
handleMissing();
}
✓ Java 9+
findUser(id).ifPresentOrElse(
this::greet,
this::handleMissing
);
Viu um problema com este código? Nos avise.
Por que a forma moderna ganha
Expressão única
Ambos os casos tratados em uma única chamada de método.
Sem get()
Elimina o padrão perigoso de isPresent() + get().
Fluente
Encadeia naturalmente após findUser() ou qualquer método que retorna Optional.
Abordagem Antiga
if/else com Optional
Abordagem Moderna
ifPresentOrElse()
Desde o JDK
9
Dificuldade
Iniciante
Suporte JDK
Optional.ifPresentOrElse()
Disponível
Amplamente disponível desde o JDK 9 (setembro de 2017)
Como funciona
ifPresentOrElse() recebe um Consumer para o caso presente e um Runnable para o caso vazio. Evita o antipadrão isPresent/get.
Documentação Relacionada