curso-dio-intro-collections icon indicating copy to clipboard operation
curso-dio-intro-collections copied to clipboard

Collections - Exemplo Ordenação Set

Open natan20200679 opened this issue 2 years ago • 5 comments

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.

natan20200679 avatar Dec 17 '21 16:12 natan20200679

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));

cami-la avatar Dec 20 '21 17:12 cami-la

Certo, mas e seu eu quiser manter a execução da ordenação Nome/Genero/TempoEpisodio que vc fez? Obg querida!

natan20200679 avatar Dec 20 '21 17:12 natan20200679

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));

  }

cami-la avatar Dec 20 '21 18:12 cami-la

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?

natan20200679 avatar Dec 20 '21 19:12 natan20200679

Nem sempre. Getters e setters não são obrigados. Vai depender do encapsulamento.

cami-la avatar Dec 20 '21 19:12 cami-la