Sobes.tech
Junior — Middle

Qual é a diferença entre os métodos orElse e orElseGet em Java, e quais são as suas características de uso?

sobes.tech IA

Resposta da IA

Em Java, os métodos orElse e orElseGet são usados com a classe Optional para definir um valor padrão caso o objeto esteja ausente.

  • orElse(T other) — aceita um valor padrão que é calculado imediatamente ao chamar o método, independentemente de haver ou não um valor no Optional.
  • orElseGet(Supplier<? extends T> other) — aceita um fornecedor (função) que é chamado somente se o valor estiver ausente, ou seja, o cálculo do valor é adiado até que seja necessário.

Características de uso:

  • Se o cálculo do valor padrão for caro ou tiver efeitos colaterais, é melhor usar orElseGet para evitar custos desnecessários.
  • Se o valor for simples e rápido, pode-se usar orElse.

Exemplo:

Optional<String> opt = Optional.empty();

// orElse sempre calcula "default"
String result1 = opt.orElse(getDefault());

// orElseGet chama getDefault() apenas se opt estiver vazio
String result2 = opt.orElseGet(() -> getDefault());

public String getDefault() {
    System.out.println("Calculando valor padrão");
    return "default";
}