Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

[Sugerencia] metodo serieEncontrada.setEpisodios

En mi caso con el codigo de la profe:

var serieEncontrada = 0;

Me causa un error: Pero serie.get() devuelve un objeto de tipo Serie. Esto causa un error de tipo, porque no puedes asignar un objeto Serie a una variable int.
Cuando intento usar:

serieEncontrada.setEpisodios(episodios);

El compilador no reconoce serieEncontrada como un objeto Serie, y falla.

La solución:
Declara serieEncontrada como Serie y no como int, por ejemplo:

Serie serieEncontrada = null;

Codigo corregido:

 private void buscarEpisodioPorSerie() {
        mostrarSeriesBuscadas();
        System.out.println("Escribe le nombre de la serie de la cual deseas ver!!!");
        var nombreSerie = teclado.nextLine();

        Optional<Serie> serie = series.stream()
                .filter(s -> s.getTitulo().toLowerCase().contains(nombreSerie.toLowerCase()))
                .findFirst();

        List<DatosTemporadas> temporadas = null;
        Serie serieEncontrada; // = null;
        if (serie.isPresent()) {
            serieEncontrada = serie.get();
            temporadas = new ArrayList<>();

            for (int i = 1; i <= serieEncontrada.getTotalTemporadas(); i++) {
                var json = consumoApi.obtenerDatos(URL_BASE + serieEncontrada.getTitulo().replace(" ", "+") + "&season=" + i + API_KEY);
                DatosTemporadas datosTemporada = conversor.obtenerDatos(json, DatosTemporadas.class);
                temporadas.add(datosTemporada);
            }
            temporadas.forEach(System.out::println);
        } else {
            System.out.println("Serie no encontrada.");
            return;
        }

        List<Episodio> episodios = temporadas.stream()
                .flatMap(d -> d.episodios().stream()
                        .map(e -> new Episodio(d.numero(), e)))
                .collect(Collectors.toList());

        episodios.forEach(e -> e.setSerie(serieEncontrada));
        serieEncontrada.setEpisodios(episodios);

        // Persistimos la serie junto con los episodios en la base de datos
        repository.save(serieEncontrada);
    }

Correjido por el error de colocar serieEncontrada = null;
Y por haber olvidado guardar los datos en la DB:

  // Persistimos la serie junto con los episodios en la base de datos
        repository.save(serieEncontrada);

Porque el codigo anterior, si bien no daba error al correr, traia todos los datos nulos a la DB.

1 respuesta

Hola Christian, espero que estés bien

¡Gracias por compartir tu solución! Parece que has identificado correctamente el problema y lo has resuelto al declarar serieEncontrada como un objeto de tipo Serie en lugar de un entero (int). Esto es crucial porque, como mencionaste, serie.get() devuelve un objeto de tipo Serie, y necesitas trabajar con ese tipo para poder llamar a métodos como setEpisodios.

Tu código corregido se ve bien y debería funcionar correctamente para buscar una serie y establecer sus episodios. Aquí tienes un ejemplo práctico de cómo podrías usar tu método buscarEpisodioPorSerie:

public class Main {
    public static void main(String[] args) {
        // Suponiendo que tienes una instancia de la clase que contiene el método buscarEpisodioPorSerie
        MiClase miClase = new MiClase();
        miClase.buscarEpisodioPorSerie();
    }
}

Asegúrate de que todos los demás componentes, como consumoApi y conversor, estén correctamente configurados y funcionando, ya que son esenciales para obtener y procesar los datos de los episodios.

Espero que esta solución te ayude a avanzar en tu proyecto. ¡Bons estudios!