Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Desafio 18 #9

Open
dufernandess opened this issue Sep 13, 2023 · 4 comments
Open

Desafio 18 #9

dufernandess opened this issue Sep 13, 2023 · 4 comments

Comments

@dufernandess
Copy link

Oi, Cami, tudo bem?

No desafio 18 - "Verifique se todos os números da lista são iguais"

Eu gostaria de resolver esse desafio retornando uma lista apenas com os números que se repetem, porém, estou com dificuldades de chegar a essa resolução.
Poderia me ajudar?

@cami-la
Copy link
Collaborator

cami-la commented Sep 14, 2023

Olá, tudo certinho, e por aí? (:

Então, temos algumas formas de fazer isso, segue um exemplo:

List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3);

    // Agrupa os números com base no próprio número.
    Map<Integer, List<Integer>> grupos = numeros.stream()
        .collect(Collectors.groupingBy(num -> num));
    // Você pode ver que temos a indicação quais são os números que se repetem observando chave - valor.
    System.out.println(grupos); 
    
    // Filtra os grupos com tamanho do valor maior que 1, logo, os números repetidos.
    List<Integer> numerosRepetidos = grupos.entrySet().stream()
        .filter(entry -> entry.getValue().size() > 1) // Filtamos as chaves pelos valores contendo acima de 1 repetição
        .map(entry -> entry.getKey()) // Pegamos apenas as chaves
        .collect(Collectors.toList()); // Coletamos para uma nova lista

    // Imprime os números repetidos.
    System.out.println(numerosRepetidos);

@dufernandess
Copy link
Author

Tudo bem!

Não tinha visto por esse ponto de vista.

Muito obrigado, novamente!

@cami-la
Copy link
Collaborator

cami-la commented Sep 14, 2023

Esse é um pouquinho mais complicado porque utiliza o Map, mas com treino a gente pega! hehe

@dcasimiro89
Copy link

Tem uma possibilidade que pesquisei, achei interessante. Segue abaixo:

Set<Integer> setNumeros = new HashSet<>();  // set para guardar primeira ocorrencia de cada numero
List<Integer> numerosRepetidos = numeros.stream()  // percorre toda a lista
                .filter(n -> !setNumeros.add(n))  // filtra pelos que não são adicionados à setNumeros (repetidos)
                .toList();   // adiciona à nova lista os números repetidos
System.out.println(numerosRepetidos);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants