Explorando Streams em Java
- #Java
As streams em Java, introduzidas no Java 8, fornecem uma poderosa abstração para processamento de dados em coleções. Este artigo explora as streams, suas operações, conceitos fundamentais e como tirar o máximo proveito dessa funcionalidade.
O Que São Streams?
Em termos simples, uma stream é uma sequência de elementos que suporta várias operações para processamento desses elementos. As streams em Java proporcionam uma maneira mais eficiente e concisa de lidar com coleções de dados.
Criando Streams
Existem várias maneiras de criar streams em Java. Algumas das formas comuns incluem:
// A partir de uma coleção
List<String> lista = Arrays.asList("Java", "é", "poderoso");
Stream<String> streamDaLista = lista.stream();
// A partir de valores individuais
Stream<String> streamDeValores = Stream.of("Java", "é", "poderoso");
// A partir de um array
String[] array = {"Java", "é", "poderoso"};
Stream<String> streamDoArray = Arrays.stream(array);
Operações Intermediárias e Terminais
As operações em streams são divididas em duas categorias: intermediárias e terminais.
Operações Intermediárias
Operações intermediárias são aquelas que transformam ou filtram os elementos da stream, mas não produzem um resultado final imediatamente. Algumas operações intermediárias comuns incluem filter, map e distinct.
List<String> palavras = Arrays.asList("Java", "é", "poderoso");
// Filtrar palavras com mais de 3 letras
Stream<String> palavrasFiltradas = palavras.stream().filter(p -> p.length() > 3);
// Transformar palavras para minúsculas
Stream<String> palavrasMinusculas = palavras.stream().map(String::toLowerCase);
Operações Terminais
Operações terminais são aquelas que produzem um resultado final ou realizam uma ação final na stream. Algumas operações terminais comuns incluem forEach, collect e reduce.
List<String> palavras = Arrays.asList("Java", "é", "poderoso");
// Imprimir cada palavra
palavras.stream().forEach(System.out::println);
// Coletar palavras em uma lista
List<String> listaDePalavras = palavras.stream().collect(Collectors.toList());
Conceitos Importantes
Lazy Evaluation
Streams em Java utilizam o conceito de avaliação preguiçosa (lazy evaluation), o que significa que as operações não são realizadas imediatamente, mas somente quando um resultado final é necessário. Isso contribui para a eficiência e economia de recursos.
Parallel Streams
Uma das vantagens das streams é a capacidade de processamento paralelo. O método parallelStream() permite que as operações sejam executadas em paralelo, explorando o poder de processadores multi-core.
List<String> palavras = Arrays.asList("Java", "é", "poderoso");
// Processamento paralelo para contar o número de letras
long totalLetras = palavras.parallelStream().mapToLong(String::length).sum();
As streams em Java são uma adição valiosa ao kit de ferramentas dos desenvolvedores, proporcionando uma abordagem elegante e funcional para o processamento de dados em coleções. Ao compreender os conceitos de operações intermediárias, terminais e outros recursos, os desenvolvedores podem escrever código mais eficiente e expressivo. Explore as streams em seus projetos Java e aproveite os benefícios da programação funcional.