1
resposta

Faça como eu fiz: ordenando com Comparable

Segue a resolução do exercício.
Classe Titulo:

package br.com.alura.screenmatch.modelos;

import br.com.alura.screenmatch.calculos.Classificavel;

public class Titulo implements Comparable<Titulo>{
    private String nome;
    private int anoDeLancamento;
    private int duracaoEmMinutos;
    private boolean incluidoNoPlano;
    private double somaDasAvaliacoes;
    private int totalDeAvaliacoes;

    public Titulo(String nome, int anoDeLancamento) {
        this.nome = nome;
        this.anoDeLancamento = anoDeLancamento;
    }

    //Getters and Setters

    public double pegaMedia() {
        if (totalDeAvaliacoes != 0) {
            return somaDasAvaliacoes/totalDeAvaliacoes;
        } else {
            return 0.0;
        }
    }

    public void avalia(double avaliacao){
        somaDasAvaliacoes += avaliacao;
        totalDeAvaliacoes++;
    }


    @Override
    public String toString() {
        return  "\n[" + this.getNome() + " (" + this.getAnoDeLancamento() + "), " +
                ", duração: " + this.getDuracaoEmMinutos() + " minutos]";
    }


    @Override
    public int compareTo(Titulo o) {
        return this.getNome().compareTo(o.getNome());
    }
}

Classe Filme:

package br.com.alura.screenmatch.modelos;

import br.com.alura.screenmatch.calculos.Classificavel;

public class Filme extends Titulo implements Classificavel {
    private String diretor;

    public Filme(String nome, int anoDeLancamento) {
        super(nome, anoDeLancamento);
    }
    public Filme(String nome, String diretor, int anoDeLancamento, int duracaoEmMinutos) {
        super(nome, anoDeLancamento);
        this.setDuracaoEmMinutos(duracaoEmMinutos);
        this.setDiretor(diretor);
    }

    public String getDiretor() {
        return diretor;
    }

    public void setDiretor(String diretor) {
        this.diretor = diretor;
    }

    @Override
    public int getClassificacao() {
        return (int) pegaMedia()/2;
    }

    @Override
    public String toString() {
        return  "\n[" + this.getNome() + " (" + this.getAnoDeLancamento() + "), " +
                "diretor: " + this.diretor + ", duração: " + this.getDuracaoEmMinutos() + " minutos]";
    }
}

Classe Serie:

package br.com.alura.screenmatch.modelos;

public class Serie extends Titulo {
    private int numeroTemporadas;
    private boolean ativa;
    private int episodiosPortemporada;
    private int minutosPorEpisodio;

    public Serie(String nome, int anoDeLancamento) {
        super(nome, anoDeLancamento);
    }

     //Getters and Setters

    @Override
    public int getDuracaoEmMinutos() {
        return minutosPorEpisodio * episodiosPortemporada * numeroTemporadas;
    }

    @Override
    public String toString() {
        return  "\n[" + this.getNome() + " (" + this.getAnoDeLancamento() + ")" +
                ", duração: " + this.getDuracaoEmMinutos() + " minutos]";
    }
}

Classe PrincipalComListas:

package br.com.alura.screenmatch.principal;

import br.com.alura.screenmatch.modelos.Filme;
import br.com.alura.screenmatch.modelos.Serie;
import br.com.alura.screenmatch.modelos.Titulo;

import java.io.Serial;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;

public class PrincipalComListas {
    public static void main(String[] args) {
        Filme filme1 = new Filme("O Poderoso Chefão", 1970);
        Filme filme2 = new Filme("Avatar", 2023);
        Filme filme3 = new Filme("Dogville", 2003);
        Serie serie1 = new Serie("Supernatural", 2005);

        ArrayList<Titulo> lista = new ArrayList<>();
        lista.add(serie1);
        lista.add(filme1);
        lista.add(filme2);
        lista.add(filme3);


        System.out.println("\nLista antes da ordenação: " + lista);
        Collections.sort(lista);
        System.out.println("\nLista depois da ordenação: " + lista);
    }
}

Output:

Lista antes da ordenação: [
[Supernatural (2005), duração: 0 minutos], 
[O Poderoso Chefão (1970), diretor: null, duração: 0 minutos], 
[Avatar (2023), diretor: null, duração: 0 minutos], 
[Dogville (2003), diretor: null, duração: 0 minutos]]

Lista depois da ordenação: [
[Avatar (2023), diretor: null, duração: 0 minutos], 
[Dogville (2003), diretor: null, duração: 0 minutos], 
[O Poderoso Chefão (1970), diretor: null, duração: 0 minutos], 
[Supernatural (2005), duração: 0 minutos]]

Process finished with exit code 0
1 resposta

Oii, Raoni! Como vai?

Agradeço por compartilhar.

Gostei da sua resolução, legal notar como você aplicou o Comparable diretamente na classe Titulo, o que facilitou a ordenação da lista mista de filmes e séries pelo nome. Do jeito que você explicou, ficou claro o entendimento do funcionamento do compareTo em conjunto com o Collections.sort.

Continue explorando essas implementações, isso fortalece bastante sua base em coleções e orientação a objetos.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!