Sitemap

Java Funcional: orElse versus orElseGet

1 min readApr 27, 2024

--

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
one

Clique 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

--

--

Marlon Hildon
Marlon Hildon

Written by Marlon Hildon

Tech Lead, Back-End Senior e linha de frente de bugs absurdos.