Adjunto mi versión de solución usando la interfaz Comparator. Es una versión diferente a la solicitada en el ejercicio. Lo hice más que nada para practicar. Adicionalmente, no quise crear una nueva clase de comparación, sino que dentro del contenedor de ejecución mantuve la clase con la implementación del método compare.
package org.example;
import Models.Episodio;
import Models.Pelicula;
import Models.Serie;
import Models.Titulo;
import Services.FiltroRecomendacion;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
private static ArrayList<Titulo> titulos = new ArrayList<>();
// private static final Scanner entry = new Scanner(System.in).useDelimiter("\n");
public static void main(String[] args) {
//Instanciación películas y series
Pelicula pelicula = new Pelicula();
Serie serie = new Serie();
Pelicula peliculaNueva = new Pelicula("matrix", 1999);
Pelicula favorita = new Pelicula("El señor de los anillos", 2001);
favorita.evalua(10);
Pelicula otra = new Pelicula("John Wick", 2014);
otra.evalua(9);
Serie serieNueva = new Serie("La Casa de Papel", 2017);
//seteo de parámetros objeto pelicula
pelicula.setNombre("Encanto");
pelicula.setFechaLanzamiento(2021);
pelicula.setDuracionMinutos(120);
pelicula.setDirector("Alfredo");
//Evaluación película encanto
pelicula.evalua(4.6);
pelicula.evalua(4.9);
pelicula.evalua(4.4);
//Seteo parametros serie
serie.setNombre("lucifer");
serie.setFechaLanzamiento(2013);
serie.setTemporada(6);
serie.setMinutosPorEpisodio(50);
serie.setEpisodiosPorTemporada(13);
serie.setDuracionMinutos(serie.getDuracionMinutos());
//Evaluación serie lucifer
serie.evalua(5.6);
serie.evalua(4.9);
serie.evalua(9.8);
FiltroRecomendacion filtroRecomendacion = new FiltroRecomendacion(pelicula);
filtroRecomendacion.filtrar();
Episodio episodio = new Episodio();
episodio.setNombre("A devil of my word");
episodio.setNumero(3);
episodio.setSerie(serie);
episodio.setTotalVisualizaciones(1450);
FiltroRecomendacion filtroSerie = new FiltroRecomendacion(episodio);
filtroSerie.filtrar();
//Agregar lista
titulos.add(pelicula); titulos.add(serie); titulos.add(peliculaNueva);
titulos.add(favorita); titulos.add(otra); titulos.add(serieNueva);
//Impresiones por pantalla de los objetos
System.out.println("Detalles película: \n" + pelicula.toString());
System.out.println("Detalles serie: \n" + serie.toString());
titulos.stream().forEach(titulo -> {
if(titulo instanceof Pelicula movie && movie.getClasificacion() > 2){
System.out.println(movie.getClasificacion());
}
});
var listaArtistas = new ArrayList<String>();
listaArtistas.add("Penelope cruz");
listaArtistas.add("Brad Pitt");
listaArtistas.add("Celia Cruz");
listaArtistas.add("Antonio Banderas");
Collections.sort(listaArtistas);
System.out.println(listaArtistas);
Collections.sort(titulos);
System.out.println(titulos);
Comparator<Titulo> comparadorFecha = new Comparator<Titulo>() {
@Override
public int compare(Titulo o1, Titulo o2) {
return o1.getFechaLanzamiento() > o2.getFechaLanzamiento() ? 1 :
o1.getFechaLanzamiento() < o2.getFechaLanzamiento() ? -1 :
0;
}
};
Collections.sort(titulos, comparadorFecha);
System.out.println(titulos);
}
}