Article image
Joaquim Neto
Joaquim Neto06/02/2024 20:05
Compartilhe

Explorando Streams em 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.

    Compartilhe
    Comentários (0)