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