Principal
package com.valentina.desafio.principal;
import com.valentina.desafio.model.Datos;
import com.valentina.desafio.model.DatosAnime;
import com.valentina.desafio.service.ConsumoAPI;
import com.valentina.desafio.service.ConvierteDatos;
import java.util.Comparator;
import java.util.DoubleSummaryStatistics;
import java.util.Optional;
import java.util.Scanner;
import java.util.stream.Collectors;
public class Principal {
private static final String URL_BASE_AÑO = "https://api.jikan.moe/v4/anime?start_date=2023-01-01&end_date=2023-12-31";
//"https://api.jikan.moe/v4/anime?q=" + animeName.replace(" ", "%20");
private static final String URL_BASE = "https://api.jikan.moe/v4/anime?q=";
private ConsumoAPI consumoAPI = new ConsumoAPI();
private ConvierteDatos conversor = new ConvierteDatos();
private Scanner teclado = new Scanner(System.in);
public void muestraElMenu(){
System.out.println("");
System.out.println("-------------");
var json = consumoAPI.obtenerDatos(URL_BASE_AÑO);
//System.out.println(json);
var datos = conversor.obtenerDatos(json, Datos.class);
System.out.println(datos);
//TOP 5 MAS POPULARES
System.out.println("");
System.out.println("--- TOP 5 MAS POPULARES 2023 ---");
datos.resultados().stream()
.sorted(Comparator.comparing(DatosAnime::popularidad).reversed())
.limit(5)
.map(l -> l.titulo().toUpperCase())
.forEach(System.out::println);
//ESTADISTICAS
System.out.println("");
System.out.println("---ESTADISTICAS ANIMES 2023---");
DoubleSummaryStatistics est = datos.resultados().stream()
.filter(d -> d.popularidad() > 0)
.collect(Collectors.summarizingDouble(DatosAnime::popularidad));
System.out.println("Promedio de popularidad: " + est.getAverage());
System.out.println("Maxima popularidad: " + est.getMax());
System.out.println("Minina popularidad: " + est.getMin());
System.out.println("Cantidad de registros evaluados para calcular las estadisticas: " + est.getCount());
//BUSQUEDA POR NOMBRE
System.out.println("");
System.out.println("--- BUSQUEDA ---");
System.out.println("Escriba el nombre del anime");
var tituloAnime = teclado.nextLine();
json = consumoAPI.obtenerDatos(URL_BASE + tituloAnime.replace(" ","%20"));
var datosBusqueda = conversor.obtenerDatos(json, Datos.class);
Optional<DatosAnime> animeBuscado = datosBusqueda.resultados().stream()
.filter(l -> l.titulo().toUpperCase().contains(tituloAnime.toUpperCase()))
.findFirst();
if(animeBuscado.isPresent()){
System.out.println("Anime encontrado");
System.out.println(animeBuscado.get());
}else {
System.out.println("Anime no encontrado");
}
}
}