Solucionado (ver solución)
Solucionado
(ver solución)
3
respuestas

Duda: Bloque búsqueda episodios a partir de un año

Buen día estimado mentor y comunidad, reciban saludos!!! Estuve siguiendo el vídeo "09 Buscando un episodio a partir de una fecha” del “03 manipulando flujos las colecciones…” Con la siguiente salida después de ejecución (por favor leer)

[:: Spring Boot ::                (v3.2.5)
2024-05-02T13:33:06.013-07:00  INFO 2244 --- [screenmatch] [           main] c.a.screenmatch.ScreenmatchApplication   : Starting ScreenmatchApplication using Java 17.0.11 with PID 2244 (D:\2023downloads\javaEntrenamiento\4_spring\screenmatch\target\classes started by Windows in 
java.lang.Error: Unresolved compilation problems: 
        Syntax error on token ")", ElidedSemicolonAndRightBrace expected
        Syntax error, insert ")" to complete Expression
        Syntax error on token ")", delete this token
        Syntax error, insert ")" to complete MethodInvocation

        at com.aluracursos.screenmatch.principal.Principal.muestralElMenu(Principal.java:78) ~[classes/:na]
        at com.aluracursos.screenmatch.ScreenmatchApplication.run(ScreenmatchApplication.java:32) ~[classes/:na]
        at org.springframework.boot.SpringApplication.lambda$callRunner$5(SpringApplication.java:790) ~[spring-boot-3.2.5.jar:3.2.5]
...

Revisé el código (ver debajo) y no encuentro donde realizar la modificación a fin de que opere correctamente ¿Podría proporcionarme por favor mayor información y un ejemplo? Prinicpal.java

    //mostrar menu
    public void muestralElMenu(){
        ...
        List<DatosTemporadas> temporadas = new ArrayList<>();
            for (int i = 1; i <= datos.totalDeTemporadas(); i++) {
                json = consumoApi.obtenerDatos(URL_BASE + nombreSerie.replace(" ", "+") + "&Season=" + i + API_KEY);
                var datosTemporadas = conversor.obtenerDatos(json, DatosTemporadas.class);
                temporadas.add(datosTemporadas);			}			
            List<DatosEpisodio> datosEpisodios = temporadas.stream()
                .flatMap(t->t.episodios().stream())
                .collect(Collectors.toList()) 
                ;
                System.out.println("TOP 5 episodios");
                datosEpisodios.stream()
                    .filter(e->!e.evaluacion().equalsIgnoreCase("N/A"))
                    .sorted(Comparator.comparing(DatosEpisodio::evaluacion).reversed())
                    .limit(5)
                    .forEach(System.out::println)
                    ;
            
            List<Episodio> episodios = temporadas.stream()
                .flatMap(t->t.episodios().stream()
                    **.map(d->new Episodio(t.numero(),d)) // ----------Aquí muestra error --------   at com.aluracursos.screenmatch.principal.Principal.muestralElMenu(Principal.java:78) ~[classes/:na]**
                    )                                                              
                .collect(Collectors.toList())
                ;
            episodios.forEach(System.out::println); //falta crear toString en Episodio.java

        //busqueda episodios a partir de un año
        System.out.println("Indicar el año a partir del cuál deseas ver los episodios...");
        var fecha = teclado.nextInt();
        teclado.nextLine();
        LocalDate fechaBusqueda = LocalDate.of(fecha, 1,1);
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd-MM-yyyy");
        episodios.stream() 
                .filter(e->e.getFechaDeLanzamiento() !null && e.getFechaDeLanzamiento().isAfter(fechaBusqueda))
                .forEach(e->System.out.println(
                    "Temporada " + e.getTemporada() 
                        + "Episodio " + e.getTitulo()
                        + "Fecha de lanzamiento " + e.getFechaDeLanzamiento().format(dtf)));
        }

TERMINO Episodio.java

public class Episodio {
    private Integer temporada;
    private String titulo;
    private Integer numeroEpisodio;
    private double evaluacion;
    private LocalDate fechaDeLanzamiento;

    public Episodio(Integer numero, DatosEpisodio d){
        this.temporada = numero;
        this.titulo = d.titulo();
        this.numeroEpisodio = d.numeroEpisodio();

        try {
            this.evaluacion = Double.valueOf(d.evaluacion());
        } catch (NumberFormatException  e) {
            this.evaluacion = 0.0;
        }
        try {
            this.fechaDeLanzamiento = LocalDate.parse(d.fechaDeLanzamiento()); 
        } catch (DateTimeParseException e) {
            this.fechaDeLanzamiento = null;
        }
    }
    //getter & setters
    @Override
    public String toString() {
        return 
            "temporada=" + temporada 
            + ", titulo=" + titulo 
            + ", numeroEpisodio=" + numeroEpisodio
            + ", evaluacion=" + evaluacion 
            + ", fechaDeLanzamiento=" + fechaDeLanzamiento 
            ;
    }
}

Agradeciendo de antemano su orientación y guía a sus comentarios, Feliz día, Alberto

3 respuestas

Saludos Aberto.

El log indica un error de sintaxis " ) "

Revizar el dibujo adjunto. Quizas sea este el error.

Saludos.

Sugerencia

solución!

Muchas gracias @Estudiante por la pronta respuesta.

Realice el cambio de acuerdo con la sugerencia (gracias por la imagen) y, operó sin problemas. Después, modifique como aparece en el vídeo (ver imagen debajo) y opera correctamente

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

Hola, tengo una duda. En el momento de que Genesis hizo el localDate de fechaBusqueda, para indicar desde que fecha se va a buscar, especificamente en la línea 77:

        LocalDate fechaBusqueda = LocalDate.of(fecha, 1, 1);

Mi Java me sugiere que haga un wrap envolvente con Integer.Int(). Pero en el codigo de la instructora, me doy cuenta que no paso nada y le dejo meter el codigo son arrojar problema a que se debe esto y cual es la solución que me das?

A continuación, te muestro mi codigo y la sugerencia que me dan:

fragmento del codigo que arroja error, línea 77fragemento de codigo, sugerencia Inteellij