digitalinnovationone / ganhando_produtividade_com_Stream_API_Java

Este repositório contém o código-fonte do curso "Ganhando Produtividade com Stream API Java". O curso foi projetado para ajudar desenvolvedores Java a aproveitar ao máximo a poderosa Stream API introduzida no Java 8.
https://web.dio.me/course/ganhando-produtividade-com-stream-api
790 stars 493 forks source link

DUVIDA - STREAM-API #1

Open RafaSamm opened 1 year ago

RafaSamm commented 1 year ago

Olá, estou tentando remover elementos utilizando o removeIf, mas a IDE me passa uma exception = UnsupportedOperationException : remove List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3);

         numeros.removeIf(n -> n % 2 != 0);
         System.out.println(numeros);

Obs: Tentei de diversas maneiras, mesmo colocando como exceção checada e não checada, simplesmente ele não aceita, o que faço?

att Rafael

cami-la commented 1 year ago

Oi, Rafa. Tudo bem?

Obrigada pela pergunta, bem interessante. Vamos lá: quando você inicia uma List com o Arrays.asList() você cria uma lista que não pode ser modificada. Daí, você esta tentando usar um método que para ele ser executado, por default, ele precisa modificar o objeto.

Screenshot from 2023-08-17 14-46-19

Iniciei o objeto números com uma lista que pode ser modificada, e deu certo. Sua implementação do método removeIf() está correta!

Aí para utilizar o método removeIf() você poderá fazer da seguinte forma:

    List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3);
    /*numeros.removeIf(n -> n % 2 != 0);
    System.out.println(numeros);*/

    //Fazendo uma cópia da lista que não pode ser modificada:
    List<Integer> numeros2 = new ArrayList<>(numeros);

    // Aqui retornará true porque as duas listas contêm os mesmos elementos na mesma ordem.
    //Porém, elas são objetos distintos em memória.
    System.out.println(numeros2.equals(numeros));

    //Agora sim você consegue remover os elementos:
    numeros2.removeIf(n -> n % 2 != 0);
    System.out.println(numeros2);
  }
}

Screenshot from 2023-08-17 15-16-25

RafaSamm commented 1 year ago

olá, tudo bem Cami....agora eu entendi...muito obrigado...simples e direto....perfeito. No máximo eu estava somente isolando os ímpares dos pares, obrigado!!!!