Dominando a Stream API no Java
Foto de Luis P.
Por: Luis P.
12 de Janeiro de 2025

Dominando a Stream API no Java

Introdução à Programação Funcional com Streams

Java Java 8 Java Web

A Stream API, introduzida no Java 8, revolucionou a forma como lidamos com coleções de dados. Antes dessa API, as manipulações eram feitas com loops explícitos e lógica imperativa, resultando em códigos mais verbosos e propensos a erros. A Stream API oferece uma abordagem funcional, permitindo processar coleções de maneira declarativa, o que torna o código mais legível, conciso e expressivo.

Neste artigo, exploraremos os fundamentos da Stream API, apresentaremos exemplos práticos e destacaremos as melhores práticas para aproveitar todo o seu potencial.


O que é uma Stream?

Uma Stream no Java é uma sequência de elementos que podem ser processados em operações funcionais. Ela não armazena dados, mas processa coleções de dados ou outras fontes de maneira eficiente, com suporte a paralelismo e operações em pipeline.

Características principais:

  • Não armazena dados: Streams são apenas um fluxo de dados, não uma estrutura de armazenamento.
  • Imutável: As operações em Streams não modificam a coleção original.
  • Lazy (Avaliação Tardia): As operações em Streams são executadas apenas quando necessário.
  • Suporte a paralelismo: Usando parallelStream, é possível executar operações em múltiplos núcleos de CPU para ganho de desempenho.

Operações com Streams

As operações em Streams são divididas em duas categorias:

1. Operações Intermediárias

Essas operações transformam uma Stream em outra Stream. São "preguiçosas", ou seja, não executam nada até que uma operação terminal seja chamada. Exemplos:

  • filter: Filtra elementos com base em uma condição.
  • map: Transforma elementos em outra forma ou tipo.
  • sorted: Ordena os elementos.

Exemplo:

List<String> nomes = List.of("Ana", "Bruno", "Carlos", "Amanda");
List<String> nomesFiltrados = nomes.stream()
    .filter(nome -> nome.startsWith("A"))
    .sorted()
    .toList();
System.out.println(nomesFiltrados); // [Amanda, Ana]

2. Operações Terminais

Essas operações encerram o pipeline e geram um resultado ou efeito colateral. Exemplos:

  • collect: Coleta os elementos em uma coleção.
  • forEach: Executa uma ação para cada elemento.
  • reduce: Combina os elementos em um único valor.

Exemplo:

List<Integer> numeros = List.of(1, 2, 3, 4, 5);
int soma = numeros.stream()
    .reduce(0, Integer::sum);
System.out.println(soma); // 15

Vantagens do Uso de Streams

1. Código mais conciso e expressivo

Com Streams, é possível reduzir a quantidade de código necessária para manipulações complexas.

2. Facilidade de paralelismo

A execução paralela é simplificada com parallelStream, permitindo maior desempenho em grandes conjuntos de dados.

3. Imutabilidade e Segurança

Streams não alteram os dados originais, promovendo um código mais seguro e previsível.


Boas Práticas com Streams

  • Evite abusar de operações longas: Pipelines muito complexos podem prejudicar a legibilidade e o desempenho.
  • Prefira métodos específicos: Sempre que possível, use métodos como toList() ou toSet() para coletar resultados, em vez de genéricos.
  • Cuidado com parallelStream: Paralelismo pode não ser eficiente em todos os casos; avalie o impacto antes de usar.

Conclusão

A Stream API é uma poderosa ferramenta no Java moderno, permitindo manipulações de coleções de maneira funcional e eficiente. Compreender suas operações e características é essencial para escrever códigos mais limpos e performáticos. Adote boas práticas e explore o potencial dessa API para transformar sua forma de programar no dia a dia.

Explore mais: Experimente criar pipelines de Streams em seus próprios projetos e descubra como essa abordagem pode simplificar tarefas comuns no Java.

Luis P.
Luis P.
Boa Ventura / PB
Responde em 7 h e 47 min
Identidade verificada
1ª hora grátis
5,0
nota média
1
avaliação
R$ 40
por hora
Graduação: Licenciatura em Computação (UEPB - Universidade Estadual da Paraíba)
Testes em Java, Java para Web, Java - Springboot
Professor de informática, português e inglês. Formado em computação e letras inglês/português. Servidor público aprovado em 3 concursos.

Confira artigos similares

Aprenda sobre qualquer assunto