Gerenciamento de Memória em Java
em 21 de Janeiro de 2025
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.
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:
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]
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
Com Streams, é possível reduzir a quantidade de código necessária para manipulações complexas.
A execução paralela é simplificada com parallelStream
, permitindo maior desempenho em grandes conjuntos de dados.
Streams não alteram os dados originais, promovendo um código mais seguro e previsível.
Boas Práticas com Streams
toList()
ou toSet()
para coletar resultados, em vez de genéricos.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.