1
resposta

Faça como eu fiz: ordenando com Comparable

Implementar a interface Comparable

Adicionei o Comparable na classe, com o implements:

public class Tipo implements Comparable<Tipo>

E no método coloquei desta forma:

@Override
    public int compareTo(Tipo outroTipo) {
        return this.getNome().compareTo(outroTipo.getNome());
    }

Meu main ficou dessa forma:

Filme filme1 = new Filme("Interestelar", 2015, "Um grupo de exploradores viaja através de um buraco de minhoca em busca de um novo lar para a humanidade.", true,8.7, "Christopher Nolan",169);
        Filme filme2 = new Filme("Tropa de Elite", 2007, "Um capitão do BOPE tenta combater o tráfico de drogas no Rio de Janeiro.", true, 8.1, "José Padilha",115 );
        Serie serie1 = new Serie("Breaking Bad", 2008, "Um professor de química se torna um fabricante de metanfetamina após ser diagnosticado com câncer.", true, 9.5, 0, 5, 13);

        Filme f1 = new Filme("Cidade de Deus", 2002, 8.7);
        Filme f2 = new Filme("De Volta Para o Futuro" ,1985, 10.0);
        List<Tipo> listaFilmes = new LinkedList<>();

        listaFilmes.add(filme1);
        listaFilmes.add(filme2);
        listaFilmes.add(f1);
        listaFilmes.add(f2);
        listaFilmes.add(serie1);

        System.out.println("Array geral: ");
        System.out.println(listaFilmes);

        Collections.sort(listaFilmes);
        System.out.println("\nOrdenando conteúdo por título: ");
        System.out.println(listaFilmes);

        System.out.println("\nOrdenando por ano de lançamento: ");
        listaFilmes.sort(Comparator.comparing(Tipo::getAnoLancamento));
        System.out.println(listaFilmes);

E a saída no console ficou assim, ordenado de duas formas diferentes:

Array geral: 
[Filme: Interestelar (2015), Filme: Tropa de Elite (2007), Filme: Cidade de Deus (2002), Filme: De Volta Para o Futuro (1985), Série: Breaking Bad(2008)]

Ordenando conteúdo por título: 
[Série: Breaking Bad(2008), Filme: Cidade de Deus (2002), Filme: De Volta Para o Futuro (1985), Filme: Interestelar (2015), Filme: Tropa de Elite (2007)]

Ordenando por ano de lançamento: 
[Filme: De Volta Para o Futuro (1985), Filme: Cidade de Deus (2002), Filme: Tropa de Elite (2007), Série: Breaking Bad(2008), Filme: Interestelar (2015)]

Process finished with exit code 0
1 resposta

Oi, Paulo! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Sua organização no uso do Comparable ficou ótima e mostra que entendeu bem como ordenar objetos por diferentes critérios. Gostei de ver a comparação por título via compareTo e depois o uso de Comparator.comparing para o ano. Isso traz flexibilidade na ordenação e facilita a leitura dos dados.

Uma dica é criar um Comparator personalizado para outros critérios, como nota ou duração. Veja este exemplo:


listaFilmes.sort(Comparator.comparing(Tipo::getNota).reversed());

Esse código usa comparing para ordenar por nota em ordem decrescente. Basta garantir que o método getNota() existe na sua classe Tipo.

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