Java Funcional: orElse versus orElseGet
O uso do if-else é bastante intuitivo: a execução do else é realizada caso a condição presente no is não seja satisfeita.
Certo?
Quando o assunto é Java funcional, não exatamente.
"Problema"
Não é exatamente um problema, mas o design deste método é:
O
orElseéeager; ou seja, ele sempre será executado.
Exemplo:
import java.util.Optional;
public class App {
public static void main(String[] args) {
System.out.println(Optional.of("one").orElse(getTwo()));
}
private static String getTwo() {
System.out.println("getTwo was executed");
return "two";
}
}Saída:
getTwo was executed
oneClique aqui para ver in loco.
Get Marlon Hildon’s stories in your inbox
Join Medium for free to get updates from this writer.
Logo, mesmo que o Optional possua algum valor, o orElse será executado primeiro.
"Solução"
Caso precise usar uma abordagem funcional onde o "senão" seja executado por último, use o orElseGet:
import java.util.Optional;
public class App {
public static void main(String[] args) {
System.out.println(Optional.of("one").orElseGet(() -> getTwo()));
}
private static String getTwo() {
System.out.println("getTwo was executed");
return "two";
}
}Saída:
one




