ganhando_produtividade_com_Stream_API_Java icon indicating copy to clipboard operation
ganhando_produtividade_com_Stream_API_Java copied to clipboard

Dúvida desafio 4

Open WillderCanabrava opened this issue 2 years ago • 4 comments

Oi, Camila!

No desafio 4, consegui selecionar os números ímpares, porém quando fui removê-los da lista, não deu certo (tentei remover utilizando o método removeAll). Qual o procedimento para a remoção?

Obrigado!

Segue meu código:

public class RemoverImpares {

public static void main(String[] args) {

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

    List<Integer> numerosImpares = numeros.stream().filter(n -> n % 2 != 0).toList();

}

}

WillderCanabrava avatar Sep 20 '23 16:09 WillderCanabrava

Olá, bom dia! (: Então, sua solução está quase certa.

O desafio é: "Remova todos os valores ímpares:", logo vamos pegar apenas os números pares e caso tenha, o número 0.

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

List<Integer> numerosParesComZero = numeros.stream()
        .filter(n -> n % 2 == 0 || n == 0) // Filtra números pares e o zero
        .collect(Collectors.toList());

        System.out.println("Números pares e neutro na lista: " + numerosPares);

Eu faria dessa forma, ficou bom? Deu para entender?

cami-la avatar Sep 25 '23 13:09 cami-la

Ahh, entendi! Muito obrigado!

WillderCanabrava avatar Sep 27 '23 13:09 WillderCanabrava

Boa noite, Cami. Tudo bem? Estava quebrando a cabeça tentando remover literalmente os números ímpar da lista. Eu cheguei exatamente até o filter(n -> n % 2 != 0), com a mesma lógica do Wilder, porém estava procurando um método seguinte da stream, algo relacionado por exemplo .remove(), para remover o que está sendo filtrado. Por um acaso, pela stream tem como fazer isso?

dcasimiro89 avatar Oct 06 '23 22:10 dcasimiro89

Boa pergunta! @dcasimiro89 Aqui está uma maneira de fazer isso:

numeros.removeIf(numero -> numero % 2 != 0);

Mas, precisa ficar atento! O método removeIf() modifica a lista original. Isso pode não ser a melhor opção se você quiser manter a lista original sem alterações.

Uma alternativa é usar o seguinte código:

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

List<Integer> numerosParesComZero = numeros.stream()
        .filter(n -> n % 2 == 0 || n == 0) // Aqui, estamos filtrando números pares e o zero
        .collect(Collectors.toList());

System.out.println("Números pares e neutro na lista: " + numerosParesComZero);

Dessa forma, você cria uma nova lista chamada numerosParesComZero, que contém apenas os números pares e o zero da lista original. Assim, você mantém a lista original intacta, sem fazer alterações nela. É uma maneira mais segura de realizar essa tarefa!

cami-la avatar Nov 29 '23 16:11 cami-la