Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Ordenando com Comparable

// Titulo

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

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

    public String getNome() {
        return nome;
    }

    public int getAnoDeLancamento() {
        return anoDeLancamento;
    }

    public boolean isIncluidoNoPlano() {
        return incluidoNoPlano;
    }

    public int getDuracaoEmMinutos() {
        return duracaoEmMinutos;
    }

    public int getTotalDeAvaliacoes() {
        return totalDeAvaliacoes;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public void setAnoDeLancamento(int anoDeLancamento) {
        this.anoDeLancamento = anoDeLancamento;
    }

    public void setDuracaoEmMinutos(int duracaoEmMinutos) {
        this.duracaoEmMinutos = duracaoEmMinutos;
    }

    public void setIncluidoNoPlano(boolean incluidoNoPlano) {
        this.incluidoNoPlano = incluidoNoPlano;
    }

    public void exibeFichaTecnica(){
        System.out.println("Nome do filme: " + nome);
        System.out.println("Ano de lancamento: " + anoDeLancamento);
        System.out.println("Duração em minutos:" + duracaoEmMinutos);
        System.out.println("incluido no plano: " + incluidoNoPlano);

    }

    public void avalia(double nota){
        somaDasAvalacoes += nota;
        totalDeAvaliacoes++;
    }

    public double pegaMedia(){
        return somaDasAvalacoes / totalDeAvaliacoes;
    }

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

// PrincipalComListas

import br.com.alura.screenmatch.modelos.Filme;
import br.com.alura.screenmatch.modelos.Serie;
import br.com.alura.screenmatch.modelos.Titulo;
import java.util.*;

public class PrincipalComListas {
    public static void main(String[] args) {

        Filme meufilme = new Filme("Sempre ao seu lado", 2009);
        meufilme.avalia(9);
        Filme outrofilme = new Filme("Avatar", 2023);
        outrofilme.avalia(7);
        var filmeDoSamil = new Filme("Hook,o retorno do Capitão Gancho", 1991);
        filmeDoSamil.avalia(10);
        Serie cobra= new Serie("Cobra Kai", 2018);

        List<Titulo> lista = new LinkedList<>();
        lista.add(filmeDoSamil);
        lista.add(meufilme);
        lista.add(outrofilme);
        lista.add(cobra);
        for (Titulo item: lista) {
            System.out.println(item.getNome());
            if (item instanceof Filme filme && filme.getClasificacao() > 2) {
                System.out.println("Clasificação " + filme.getClasificacao());
            }
        }

        ArrayList<String> buscaPorArtista = new ArrayList<>();
        buscaPorArtista.add("Robert Williams");
        buscaPorArtista.add("Tom Cruise");
        buscaPorArtista.add("Sandra Bullock");

        Collections.sort(buscaPorArtista);
        System.out.println("Depois da ordenação ");
        System.out.println(buscaPorArtista);
        System.out.println("Lista de titulos orednados: ");
        Collections.sort(lista);
        System.out.println(lista);
        lista.sort(Comparator.comparing(Titulo::getAnoDeLancamento));
        System.out.println("Ordenando por ano: ");
        System.out.println(lista);
    }
}

//Serie

public class Serie extends Titulo {
    private int temporadas;
    private boolean ativa;
    private int episodiosPorTemporada;
    private int minutosPorEpisodio;

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

    public int getTemporadas() {
        return temporadas;
    }

    public void setTemporadas(int temporadas) {
        this.temporadas = temporadas;
    }

    public boolean isAtiva() {
        return ativa;
    }

    public void setAtiva(boolean ativa) {
        this.ativa = ativa;
    }

    public int getEpisodiosPorTemporada() {
        return episodiosPorTemporada;
    }

    public void setEpisodiosPorTemporada(int episodiosPorTemporada) {
        this.episodiosPorTemporada = episodiosPorTemporada;
    }

    public int getMinutosPorEpisodio() {
        return minutosPorEpisodio;
    }

    public void setMinutosPorEpisodio(int minutosPorEpisodio) {
        this.minutosPorEpisodio = minutosPorEpisodio;
    }

    @Override
    public int getDuracaoEmMinutos() {
        return temporadas * episodiosPorTemporada * minutosPorEpisodio;
    }

    @Override
    public String toString() {
        return "Serie: " + this.getNome() + "(" + this.getAnoDeLancamento() + ")";
    }
}
1 resposta
solução!

Oii Samil, tudo bem?

Agradeço por compartilhar seu código sobre ordenação de títulos utilizando a interface Comparable em Java! Sua implementação é clara e demonstra bem o uso dessa interface para definir a ordem de classificação dos objetos da classe Titulo.

A organização do código em classes separadas e a utilização de herança na classe Serie mostram uma boa prática de programação orientada a objetos. E a ordenação da lista de títulos por nome e por ano de lançamento, tanto usando o método sort quanto a função Collections.sort, está correta e mostra um entendimento sólido do conceito de ordenação em Java.

Continue praticando e compartilhando seu conhecimento com a comunidade!

Um abraço e bons estudos.