DEV Community

FUNDAMENTOS JAVA
FUNDAMENTOS JAVA

Posted on

7.8 O Optional em java.util

Por que average() não retorna double diretamente?

  • Se a lista for vazia, dividir por zero resultaria em Infinity.
  • A solução antiga precisava de um if para evitar esse problema.
double pontuacaoMedia;
if (usuarios.isEmpty()) {
    pontuacaoMedia = 0;
} else {
    pontuacaoMedia = soma / usuarios.size();
}

Enter fullscreen mode Exit fullscreen mode

Solução com OptionalDouble:

  • average() retorna um OptionalDouble, evitando verificações manuais.
OptionalDouble media = usuarios.stream()
    .mapToInt(Usuario::getPontos)
    .average();
double pontuacaoMedia = media.orElse(0.0);

Enter fullscreen mode Exit fullscreen mode

Lançando exceção se a média não existir:

double pontuacaoMedia = usuarios.stream()
    .mapToInt(Usuario::getPontos)
    .average()
    .orElseThrow(IllegalStateException::new);

Enter fullscreen mode Exit fullscreen mode

Executando ação se houver um valor presente:

usuarios.stream()
    .mapToInt(Usuario::getPontos)
    .average()
    .ifPresent(valor -> janela.atualiza(valor));

Enter fullscreen mode Exit fullscreen mode

Uso do Optional
Encontrando o usuário com mais pontos:

Optional<Usuario> max = usuarios.stream()
    .max(Comparator.comparingInt(Usuario::getPontos));

Enter fullscreen mode Exit fullscreen mode

Extraindo um valor do Optional:

Usuario usuarioComMaisPontos = max.orElse(null);

Enter fullscreen mode Exit fullscreen mode

Mapeando para obter o nome do usuário com mais pontos:

Optional<String> maxNome = usuarios.stream()
    .max(Comparator.comparingInt(Usuario::getPontos))
    .map(Usuario::getNome);

Enter fullscreen mode Exit fullscreen mode

Conclusão

  • O Optional melhora a segurança contra NullPointerException.
  • Evita verificações manuais desnecessárias, tornando o código mais limpo.
  • Trabalha bem com streams, permitindo programação funcional fluente.

Top comments (0)