Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
7
respuestas

Organizar Nuestro codigo

PrincipalConListas.java

package com.lcastillodv.screenmatch.principal;

import com.lcastillodv.screenmatch.modelos.Pelicula;
import com.lcastillodv.screenmatch.modelos.Serie;
import com.lcastillodv.screenmatch.modelos.Titulo;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class PrincipalConListas {
    public static void main(String[] args) {
        
        Pelicula pelicula1 = new Pelicula("El Padrino", 1972);
        pelicula1.evaluarPelicula(9);
        Pelicula pelicula2 = new Pelicula("Coco", 2017);
        pelicula2.evaluarPelicula(6);
        var pelicula3 = new Pelicula("El señor de los anillos", 2001);
        pelicula3.evaluarPelicula(10);
        Serie laCasaDragon = new Serie("La casa del dragon", 2022);
        laCasaDragon.evaluarPelicula(9);

        List<Titulo> listaDePeliculasYSeries = new ArrayList<>();
        listaDePeliculasYSeries.add(pelicula1);
        listaDePeliculasYSeries.add(pelicula2);
        listaDePeliculasYSeries.add(pelicula3);
        listaDePeliculasYSeries.add(laCasaDragon);

        for (Titulo item : listaDePeliculasYSeries) {
            System.out.println(item.getNombrePeliculaOSerie());
            if (item instanceof Pelicula pelicula) {
                System.out.println("El promedio de la pelicula " + pelicula.getNombrePeliculaOSerie() + " es " + pelicula.calcularPromedio());
            }
        }

        List<String> listaDeArtistas = new ArrayList<>();
        listaDeArtistas.add("Bono");
        listaDeArtistas.add("Antonio Banderas");
        listaDeArtistas.add("Rita Lee");

        Collections.sort(listaDeArtistas);
        System.out.println("Lista de artistas ordenada por nombre: " + listaDeArtistas);

        Collections.sort(listaDePeliculasYSeries);
        System.out.println("Lista de titulos ordenados por nombre: " + listaDePeliculasYSeries);

        listaDePeliculasYSeries.sort(Comparator.comparing(Titulo::getFechaDeLanzamiento));
        System.out.println("Lista de titulos ordenados por año: " + listaDePeliculasYSeries);
    }
}
7 respuestas

PrincipalConBusqueda.java

package com.lcastillodv.screenmatch.principal;

import com.lcastillodv.screenmatch.modelos.Titulo;
import com.lcastillodv.screenmatch.servicios.FileManager;
import com.lcastillodv.screenmatch.servicios.TituloService;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class PrincipalConBusqueda {
    public static void main(String[] args) throws IOException {
        Scanner lectura = new Scanner(System.in);
        List<Titulo> titulos = new ArrayList<>();
        TituloService tituloService = new TituloService();
        FileManager fileManager = new FileManager();

        while (true) {
            System.out.println("Ingrese el nombre de la pelicula a buscar:");
            var busqueda = lectura.nextLine();

            if (busqueda.equalsIgnoreCase("salir")) {
                System.out.println("Adiós");
                break;
            }

            try {
                Titulo titulo = tituloService.buscarTitulo(busqueda);
                if (titulo != null) {
                    titulos.add(titulo);
                    System.out.println("Titulo ya convertido: " + titulo);
                }
            } catch (Exception e) {
                System.out.println("Ocurrió un error: " + e.getMessage());
            }
        }

        fileManager.guardarTitulosEnArchivo(titulos, "titulos.json");
        System.out.println("Finalizo el programa");
    }
}

TituloService.java

package com.lcastillodv.screenmatch.servicios;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.FieldNamingPolicy;
import com.lcastillodv.screenmatch.modelos.Titulo;
import com.lcastillodv.screenmatch.modelos.TituloOmdb;

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class TituloService {
    private final Gson gson;

    public TituloService() {
        this.gson = new GsonBuilder()
                .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
                .setPrettyPrinting()
                .create();
    }

    public Titulo buscarTitulo(String busqueda) throws IOException, InterruptedException {
        String direccion = "http://www.omdbapi.com/?t=" + busqueda.replace(" ", "+") + "&apikey=c15a611e";
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder().uri(URI.create(direccion)).build();
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

        TituloOmdb tituloOmdb = gson.fromJson(response.body(), TituloOmdb.class);
        return new Titulo(tituloOmdb);
    }
}

FileManager.java

package com.lcastillodv.screenmatch.servicios;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.lcastillodv.screenmatch.modelos.Titulo;

import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

public class FileManager {
    private final Gson gson;

    public FileManager() {
        this.gson = new GsonBuilder().setPrettyPrinting().create();
    }

    public void guardarTitulosEnArchivo(List<Titulo> titulos, String archivo) {
        try (FileWriter escritura = new FileWriter(archivo)) {
            escritura.write(gson.toJson(titulos));
            System.out.println("Archivo guardado exitosamente.");
        } catch (IOException e) {
            System.out.println("Error al guardar el archivo: " + e.getMessage());
        }
    }
}

TituloOmdb.java

package com.lcastillodv.screenmatch.modelos;

public record TituloOmdb(String title, String year, String runtime) {

}

Titulo.java

package com.lcastillodv.screenmatch.modelos;

import com.google.gson.annotations.SerializedName;
import com.lcastillodv.screenmatch.exceptions.ErrorEnConvercionDeDuracionException;

public class Titulo implements Comparable<Titulo> {

    private String nombrePeliculaOSerie;
    private int duracionEnMinutos;
    private int fechaDeLanzamiento;
    private boolean visto;
    private boolean incluidoEnElPlan;
    private double sumaCalificacion;
    private int totalCalificaciones;

    public Titulo(String nombrePeliculaOSerie, int fechaDeLanzamiento) {
        this.nombrePeliculaOSerie = nombrePeliculaOSerie;
        this.fechaDeLanzamiento = fechaDeLanzamiento;
    }

    public Titulo(TituloOmdb miTituloOmdb) {
        this.nombrePeliculaOSerie = miTituloOmdb.title();
        this.fechaDeLanzamiento = Integer.valueOf(miTituloOmdb.year()); //casteo a int
        if (miTituloOmdb.runtime().contains("N/A")) {
            throw new ErrorEnConvercionDeDuracionException("No pude convertir la duracion, " + "porque contiene un N/A");
        }
        this.duracionEnMinutos = Integer.valueOf(miTituloOmdb.runtime().substring(0, 3).replace(" ", "")); //casteo a int
    }

    public String getNombrePeliculaOSerie() {
        return nombrePeliculaOSerie;
    }

    public void setNombrePeliculaOSerie(String nombrePeliculaOSerie) {
        this.nombrePeliculaOSerie = nombrePeliculaOSerie;
    }

    public int getDuracionEnMinutos() {
        return duracionEnMinutos;
    }

    public void setDuracionEnMinutos(int duracionEnMinutos) {
        this.duracionEnMinutos = duracionEnMinutos;
    }

    public int getFechaDeLanzamiento() {
        return fechaDeLanzamiento;
    }

    public void setFechaDeLanzamiento(int fechaDeLanzamiento) {
        this.fechaDeLanzamiento = fechaDeLanzamiento;
    }

    public boolean isVisto() {
        return visto;
    }

    public void setVisto(boolean visto) {
        this.visto = visto;
    }

    public boolean isIncluidoEnElPlan() {
        return incluidoEnElPlan;
    }

    public void setIncluidoEnElPlan(boolean incluidoEnElPlan) {
        this.incluidoEnElPlan = incluidoEnElPlan;
    }

    public int getTotalCalificaciones() {
        return totalCalificaciones;
    }

    public void mostrarDetalles() {
        System.out.println("\nLa pelicula " + nombrePeliculaOSerie + "\nSe estreno en " + fechaDeLanzamiento + ".\n" + "Y su duracion es de " + getDuracionEnMinutos() + " minutos.");
    }

    public void mostrarDetallesSerie() {
        System.out.println("\nLa pelicula " + nombrePeliculaOSerie + "\nSe estreno en " + fechaDeLanzamiento + ".\n" + "Y su duracion es de " + getDuracionEnMinutos() + " minutos.");
    }

    public void evaluarPelicula(double calificacion) {
        sumaCalificacion += calificacion;
        totalCalificaciones++;
    }

    public double calcularPromedio() {
        return sumaCalificacion / totalCalificaciones;
        
    }

    @Override
    public int compareTo(Titulo otroTitulo) {
        return this.getNombrePeliculaOSerie().compareTo(otroTitulo.getNombrePeliculaOSerie());
    }

    @Override
    public String toString() {
        return  "\nNombre= " + nombrePeliculaOSerie +
                "\nFecha De Lanzamiento= " + fechaDeLanzamiento +
                "\nDuracion= " + duracionEnMinutos + "\n\n";
    }
}

ErrorEnConvercionDeDuracionException.java

package com.lcastillodv.screenmatch.exceptions;

public class ErrorEnConvercionDeDuracionException extends RuntimeException {
    private String mensaje;

    public ErrorEnConvercionDeDuracionException(String mensaje) {
        this.mensaje = mensaje;
    }

    @Override
    public String getMessage() {
        return this.mensaje;
    }

}
solución!

¡Hola Luis! ¿Cómo estás?

Gracias por tu aporte en el foro. Su contribución es esencial para el crecimiento de nuestra comunidad en Alura.

Sigue así y no dudes en volver al foro si tienes alguna pregunta o dificultad.

Abrazos y buenos estudios!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios!