1
resposta

Optional com coleções

Olá! Utilizei primeiramente um Optional que continha um List para o método buscarSeriesPorAtor( ), porém mesmo que a lista estivesse vazia, ele não dava FALSE em isPresent( ). Pelo que entendi, Optional não funciona com coleções. Por algum motivo, elas já vem instanciadas neste caso, ou então simplesmente não funcionou porque a SerieRepository, classe em que este método foi declarado, foi feita exclusivamente para uma Serie. Ou simplesmente Optional não funciona com coleções. Meu raciocínio está correto em algum desses pontos? Existe alguma alternativa para meu código?

1 resposta

Oi Guilherme! Tudo bem?

O Optional realmente não funciona muito bem com coleções não. Ele foi projetado para lidar com valores que podem ou não estar presentes, mas existe o caso, por exemplo, de uma lista vazia ainda ser uma lista presente, apenas sem elementos. Por isso, ao usar Optional<List<Serie>>, o isPresent() retornará true, mesmo que a lista esteja vazia, porque o próprio objeto List não é nulo.

Em vez disso, a prática comum é retornar diretamente uma lista vazia quando não há resultados. Por exemplo:

List<Serie> seriesEncontradas = repositorio.findByAtoresContainingIgnoreCase(nomeAtor);
if (seriesEncontradas.isEmpty()) {
    System.out.println("Nenhuma série encontrada para o ator " + nomeAtor);
} else {
    seriesEncontradas.forEach(s -> System.out.println(s.getTitulo() + " avaliação: " + s.getAvaliacao()));
}

Dessa forma, você trata o caso de uma lista vazia diretamente, sem precisar envolver a lista em um Optional.

Espero ter ajudado e bons estudos!