Domine o uso de filter, map e reduce no Java Streams

Entenda como aplicar as funções filter, map e reduce em Java Streams para manipular e processar coleções de dados de forma eficiente.

Introdução aos Java Streams

Os Java Streams são uma poderosa ferramenta para manipulação de coleções de dados. Com eles, é possível realizar operações de forma declarativa e concisa. Neste tutorial, iremos explorar as funções filter, map e reduce, que são fundamentais para a transformação e agregação de dados.

O que é o método filter?

O método filter é utilizado para filtrar elementos de uma coleção com base em uma condição específica. Por exemplo, se quisermos selecionar apenas os números pares de uma lista, poderíamos fazer o seguinte:

List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6);
List<Integer> pares = numeros.stream()
                              .filter(num -> num % 2 == 0)
                              .collect(Collectors.toList());

Neste código, criamos uma lista de números e utilizamos o método filter para obter apenas os números pares. O resultado será uma nova lista contendo os elementos 2, 4 e 6.

A função map e sua utilidade

Por sua vez, o método map é utilizado para transformar os elementos de uma coleção. Por exemplo, se quisermos dobrar os valores de uma lista de números:

List<Integer> numeros = Arrays.asList(1, 2, 3, 4);
List<Integer> dobrados = numeros.stream()
                                 .map(num -> num * 2)
                                 .collect(Collectors.toList());

Aqui, cada número da lista original foi multiplicado por 2, resultando em uma nova lista com os elementos 2, 4, 6 e 8.

O que é reduce?

O método reduce é usado para combinar elementos de uma coleção em um único resultado. Um exemplo comum é a soma de todos os elementos de uma lista:

List<Integer> numeros = Arrays.asList(1, 2, 3, 4);
int soma = numeros.stream()
                   .reduce(0, (a, b) -> a + b);

Neste caso, estamos somando todos os números da lista, começando com 0 como valor inicial. O resultado final será 10, que é a soma de 1 + 2 + 3 + 4.

Exemplos práticos

A utilização dessas funções pode ser combinada para realizar operações mais complexas. Por exemplo, suponha que temos uma lista de objetos Pessoa, e queremos filtrar apenas as pessoas maiores de idade e depois coletar seus nomes:

List<Pessoa> pessoas = Arrays.asList(new Pessoa("João", 16), new Pessoa("Maria", 20), new Pessoa("Pedro", 18));
List<String> nomesMaiorIdade = pessoas.stream()
                                       .filter(p -> p.getIdade() >= 18)
                                       .map(Pessoa::getNome)
                                       .collect(Collectors.toList());

Nesse exemplo, filtramos as pessoas maiores de idade e transformamos a lista de Pessoa em uma lista de nomes, resultando em uma nova lista com os nomes das pessoas que atendem ao critério.

Conclusão

O uso das funções filter, map e reduce em Java Streams permite que você escreva um código mais limpo e eficiente. Essas ferramentas são essenciais para quem deseja trabalhar com coleções de dados em Java de forma moderna e eficaz. Com a prática, você se tornará cada vez mais proficiente na manipulação de dados utilizando Streams.

  1. Pratique com diferentes tipos de coleções.
  2. Tente combinar várias operações em um único stream.
  3. Leia a documentação oficial para entender todos os métodos disponíveis.

Aplicações

  • Filtragem de dados em listas e conjuntos.
  • Transformação de coleções para diferentes formatos.
  • Agregação de valores para cálculos.

As funções filter, map e reduce são pilares do Java Streams e oferecem uma maneira poderosa de trabalhar com dados. Esses métodos ajudam a tornar o código mais legível e fácil de manter, permitindo operações complexas em uma única linha. Aprender a utilizá-los é um passo importante para qualquer desenvolvedor Java que queira escrever código moderno e eficiente.

Algumas aplicações:

  • Filtrar listas de dados com base em critérios específicos.
  • Transformar dados em novos formatos ou estruturas.
  • Realizar operações matemáticas sobre coleções de números.

Dicas para quem está começando

  • Comece com listas pequenas para entender o fluxo.
  • Experimente diferentes combinações de métodos.
  • Consulte a documentação para exemplos adicionais.

Contribuições de Lucas Martins

Compartilhe este tutorial: Como usar filter, map e reduce em Java Streams?

Compartilhe este tutorial

Continue aprendendo:

O que é Collectors.toList() e como utilizá-lo?

Explore o conceito de Collectors.toList() e suas aplicações no Java.

Tutorial anterior

Como iterar sobre coleções de forma eficiente em Java?

Aprenda a iterar sobre coleções em Java com técnicas eficazes que melhoram a performance e a legibilidade do seu código.

Próximo tutorial