curso-dio-intro-collections
curso-dio-intro-collections copied to clipboard
Collections - Exemplo Ordenação Set
Oi Camila, boa tarde! Estou com dúvidas no Exemplo que resolveu sobre Set. Antes de dizer a dúvida, percebi que na linha 49 do seu código, você pede algo que já resolveu (Ordem natural por Tempo Episódio, o que é o mesmo que nos pediu, rsrs), e por isto achei interessante tentar executar a ordem por Nome.
A minha solução está colocada entre as linhas 44 e 54 (comentadas), no código https://github.com/natan20200679/Java/blob/master/Collections/src/Set/Exemplo_Ordenacao.java, e que não estão resolvidas porque não consegui resolver, rsrs. Tu podes me fornecer pelo menos alguma dica de solução?! Tentei resolver aproveitando as estruturas prontas no restante do código.
Isso, falha minha. kkkk Vou te mandar uma das formas mais que usamos no dia a dia para fazer essa ordenação:
System.out.println("\n-- Ordem aleatória --");
Set<Serie> minhasSeriesOrdemAleatoria = new HashSet<>() {{
add(new Serie("got", "fantasia", 60));
add(new Serie("dark", "drama", 60));
add(new Serie("that '70s show", "comédia", 25));
}};
minhasSeriesOrdemAleatoria.forEach(serie -> System.out.println(serie));
System.out.println("\n-- Ordem Inserção --");
Set<Serie> minhasSeriesOrdemInsercao = new LinkedHashSet<>() {{
add(new Serie("got", "fantasia", 60));
add(new Serie("dark", "drama", 60));
add(new Serie("that '70s show", "comédia", 25));
}};
minhasSeriesOrdemInsercao.forEach(serie -> System.out.println(serie));
System.out.println("\n-- Ordem Nome --");
Set<Serie> minhasSeriesOrdemNome = minhasSeriesOrdemAleatoria;
minhasSeriesOrdemNome
.stream()
.sorted(Comparator.comparing(Serie::getNome))
.collect(Collectors.toList())
.forEach(serie -> System.out.println(serie));
System.out.println("\n-- Ordem Gênero --");
Set<Serie> minhasSeriesGenero = minhasSeriesOrdemAleatoria;
minhasSeriesGenero
.stream()
.sorted(Comparator.comparing(Serie::getGenero))
.collect(Collectors.toList())
.forEach(serie -> System.out.println(serie));
System.out.println("\n-- Ordem Tempo de Episódio --");
Set<Serie> minhasSeriesEpisodio = minhasSeriesOrdemAleatoria;
minhasSeriesEpisodio
.stream()
.sorted(Comparator.comparing(Serie::getTempoEpisodio))
.collect(Collectors.toList())
.forEach(serie -> System.out.println(serie));
Certo, mas e seu eu quiser manter a execução da ordenação Nome/Genero/TempoEpisodio que vc fez? Obg querida!
Obg querida!
Por nada!
Certo, mas e seu eu quiser manter a execução da ordenação Nome/Genero/TempoEpisodio que vc fez? Obg querida!
Eita, acabei esquecendo:
System.out.println("\n-- Ordem Nome/Gênero/TempoEpisodio --");
Set<Serie> minhasSeriesNomeGeneroTempoEpiodio = new HashSet<>() {{
add(new Serie("got", "fantasia", 60));
add(new Serie("dark", "drama", 60));
add(new Serie("that '70s show", "comédia", 25));
}};
minhasSeriesNomeGeneroTempoEpiodio
.stream()
.sorted((s1, s2) -> {
int nome = s1.getNome().compareToIgnoreCase(s2.getNome());
if(nome != 0) return nome;
int genero = s1.getGenero().compareToIgnoreCase(s2.getGenero());
if (genero != 0) return genero;
return Integer.compare(s1.getTempoEpisodio(), s2.getTempoEpisodio());
})
.collect(Collectors.toList())
.forEach(serie -> System.out.println(serie));
}
Camila, comparando o Exemplo_Ordenacao com o ExercicioProposto2, posso concluir que o uso de getters e setters é opcional para quaisquer tipos de interface de lista?
Nem sempre. Getters e setters não são obrigados. Vai depender do encapsulamento.