Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Outra possibilidade

Seria válido, ao invés de mexer na classe Categoria, a gente criar uma "tabela" mais ou menos assim:

1 - comédia
2 - ação
3 - terror
...

Para o usuário escolher um número e esse número ser correspondente a alguma categoria específica com algum switch case?

case 1: 
    List<Serie> seriePorCategoria = repositorio. {... ... ... ... }(COMEDIA);

    
case 2: 
    List<Serie> seriePorCategoria = repositorio. {... ... ... ... }(ACAO);

    ...

Dessa forma o programa não sofreria nenhum erro caso o usuário digitasse algo errado, ou alguma palavra sem acento

1 resposta
solução!

Oi, Dalton.

A resposta curta é: Sim, é totalmente válido e, em muitos casos, preferível!

Vamos analisar por que essa abordagem de "menu numérico" pode ser interessante e como ela se compara à busca por texto que a Jacqueline e a Iasmin implementaram.

1. Busca por Texto (abordagem da aula)

Nessa forma, o usuário digita "Comédia" ou "Ação".

  • Vantagem: Liberdade total para o usuário.
  • Desvantagem: Propensa a erros. Se o usuário digitar "Comedia" (sem acento) ou "Açao" (com erro de digitação), o sistema lança uma IllegalArgumentException, como vimos no exemplo da "Ficção".

2. Busca por menu numérico (sua sugestão)

O usuário escolhe uma opção de uma lista (1 para Comédia, 2 para Ação).

  • Vantagem: Segurança. Você restringe as opções ao que o sistema realmente conhece. Não há risco de erros de digitação ou acentuação.
  • Desvantagem: Se a lista de categorias crescer muito (ex: 50 gêneros), o menu fica visualmente poluído.

Como implementar de forma dinâmica:

Em vez de usar um switch-case gigante no código principal, podemos usar o próprio Enum Categoria para gerar esse menu de forma dinâmica. Assim, se você adicionar um novo gênero no futuro, o menu se atualiza sozinho.

Passo 1: Exibir o Menu Dinâmico

Podemos percorrer os valores do Enum:

private void buscarSeriesPorCategoria() {
    System.out.println("Escolha uma categoria pelo número:");
    Categoria[] categorias = Categoria.values();
    
    for (int i = 0; i < categorias.length; i++) {
        System.out.println((i + 1) + " - " + categorias[i]);
    }

    var escolha = leitura.nextInt();
    leitura.nextLine(); // Limpa o buffer

    if (escolha > 0 && escolha <= categorias.length) {
        Categoria categoriaEscolhida = categorias[escolha - 1];
        List<Serie> series = repositorio.findByGenero(categoriaEscolhida);
        // ... imprimir resultados
    } else {
        System.out.println("Opção inválida!");
    }
}

Por que isso é melhor?

  1. Sem erros de string: Você não precisa mais do método fromPortugues ou se preocupar com maiúsculas/minúsculas.
  2. Manutenção facilitada: Se amanhã você adicionar TERROR ao Enum Categoria, o for acima já vai mostrar a opção automaticamente no console.

Espero ter ajudado.

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!