Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Haga lo que hicimos en aula: ordenando con Comparable

modelos/Titulo.java

package modelos;

// Implementamos Comparable para decir que los Títulos se pueden comparar entre sí
public class Titulo implements Comparable<Titulo> {
    private String nombre;
    private int fechaDeLanzamiento;

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

    public String getNombre() { return nombre; }
    public int getFechaDeLanzamiento() { return fechaDeLanzamiento; }

    // Implementación del método de la interfaz Comparable
    @Override
    public int compareTo(Titulo otroTitulo) {
        // Delegamos la comparación al String 'nombre', que ya sabe cómo compararse alfabéticamente
        return this.getNombre().compareTo(otroTitulo.getNombre());
    }

    @Override
    public String toString() {
        return "Título: " + nombre + " (" + fechaDeLanzamiento + ")";
    }
}

modelos/Serie.java

package modelos;

public class Serie extends Titulo {
    public Serie(String nombre, int fechaDeLanzamiento) {
        super(nombre, fechaDeLanzamiento);
    }

    @Override
    public String toString() {
        return "Serie: " + this.getNombre() + " (" + this.getFechaDeLanzamiento() + ")";
    }
}

modelos/Pelicula.java

package modelos;

public class Pelicula extends Titulo {
    public Pelicula(String nombre, int fechaDeLanzamiento) {
        super(nombre, fechaDeLanzamiento);
    }
    
    // Si quieres que también diga "Película:" al imprimir:
    @Override
    public String toString() {
        return "Película: " + this.getNombre() + " (" + this.getFechaDeLanzamiento() + ")";
    }
}

principal/PrincipalConListas.java

package principal;

import modelos.Pelicula;
import modelos.Serie;
import modelos.Titulo;
import java.util.ArrayList;
import java.util.Collections; // ¡Importante para ordenar!

public class PrincipalConListas {
    public static void main(String[] args) {
        Pelicula favorita = new Pelicula("El señor de los anillos", 2001);
        Pelicula otra = new Pelicula("John Wick", 2014);
        Serie serie = new Serie("La Casa de Papel", 2017);

        ArrayList<Titulo> lista = new ArrayList<>();
        lista.add(favorita);
        lista.add(otra);
        lista.add(serie);

        System.out.println("Lista original:");
        System.out.println(lista);

        // El método sort usa el compareTo que escribimos en la clase Titulo
        Collections.sort(lista);

        System.out.println("\nLista ordenada alfabéticamente:");
        System.out.println(lista);
    }
}
1 respuesta

¡Hola Mario, espero que estés bien!

Parece que estás en el camino correcto con tu implementación. Has seguido los pasos necesarios para implementar la interfaz Comparable en la clase Titulo y has sobrescrito el método compareTo para permitir la ordenación alfabética basada en el nombre del título. Además, has utilizado Collections.sort en tu clase PrincipalConListas, lo cual es perfecto para ordenar la lista de títulos.

Aquí hay un resumen de lo que has hecho correctamente:

  1. Implementación de Comparable en Titulo: Has implementado la interfaz Comparable<Titulo> y sobrescrito el método compareTo para comparar los nombres de los títulos.

  2. Sobrescritura de toString: Has sobrescrito el método toString en las clases Serie y Pelicula para que muestren un formato más específico al imprimir los objetos.

  3. Uso de Collections.sort: Has utilizado Collections.sort en la clase PrincipalConListas para ordenar la lista de títulos.

Tu código debería funcionar correctamente y ordenar la lista de títulos alfabéticamente por el nombre. Si ejecutas el programa, deberías ver la lista original seguida de la lista ordenada alfabéticamente.

Espero que esto te ayude a confirmar que estás en el camino correcto. ¡Sigue adelante con tus estudios de Java!

Espero haber ayudado y buenos estudios!