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.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class PrincipalComListas {
public static void main(String[] args) {
// Criação dos objetos de mídia
List<Titulo> listaDeTitulos = criarListaDeTitulos();
// Exibição dos títulos
exibirTitulos(listaDeTitulos);
// Manipulação de uma lista de artistas
manipularListaDeArtistas();
// Ordenação da lista de títulos
ordenarListaDeTitulos(listaDeTitulos);
}
/**
* Cria e retorna uma lista com os títulos inicializados
*/
private static List<Titulo> criarListaDeTitulos() {
// Filmes
Filme meuFilme = new Filme("Chungking Express", 1994);
meuFilme.avalia(10);
Filme outroFilme = new Filme("Pulp Fiction", 1994);
outroFilme.avalia(10);
Filme filmeDoCarlos = new Filme("Ainda Estou Aqui", 2024);
filmeDoCarlos.avalia(10);
// Séries
Serie breakingBad = new Serie("Breaking Bad", 2008);
// Adicionando à lista
List<Titulo> lista = new ArrayList<>();
lista.add(filmeDoCarlos);
lista.add(meuFilme);
lista.add(outroFilme);
lista.add(breakingBad);
return lista;
}
/**
* Exibe os títulos da lista, incluindo classificação para filmes
*/
private static void exibirTitulos(List<Titulo> lista) {
System.out.println("\n***** SAÍDA Utilizando o for-each ***** ");
for (Titulo item : lista) {
System.out.println(item.getNome());
if (item instanceof Filme) {
Filme filme = (Filme) item;
if (filme.getClassificacao() > 2) {
System.out.println("Classificação: " + filme.getClassificacao());
}
}
}
}
/**
* Cria, manipula e exibe uma lista de artistas
*/
private static void manipularListaDeArtistas() {
List<String> buscaPorArtista = new ArrayList<>();
buscaPorArtista.add("Adam Sandler");
buscaPorArtista.add("Paulo");
buscaPorArtista.add("Jacqueline");
System.out.println(buscaPorArtista);
Collections.sort(buscaPorArtista);
System.out.println("Depois da ordenação: ");
System.out.println(buscaPorArtista);
}
/**
* Ordena e exibe a lista de títulos de diferentes maneiras
*/
private static void ordenarListaDeTitulos(List<Titulo> lista) {
System.out.println("\nLista de Títulos Ordenados (ordem natural - por nome):");
Collections.sort(lista);
System.out.println(lista);
lista.sort(Comparator.comparing(Titulo::getAnoDeLancamento));
System.out.println("\nOrdenando por ano de lançamento:");
System.out.println(lista);
}
}