Pular para o conteúdo principal
Módulo 7 · Lição 2 de 214/14 no curso~15 min
Lições do módulo (2/2)

API de fluxo

A API Stream em Java permite processar coleções de objetos de maneira declarativa, aproveitando a programação funcional. Um Stream não armazena dados, mas carrega elementos de uma fonte (como uma lista ou array) por meio de um pipeline de operações.

Um pipeline Stream consiste em três partes:

  1. Uma fonte (por exemplo, list.stream())
  2. Zero ou mais operações intermediárias (que retornam um novo Stream, por exemplo, filter, map)
  3. Uma operação de terminal (que produz um resultado final ou efeito colateral e fecha o Stream, por exemplo, collect, forEach, reduce)

Operações intermediárias comuns

As operações intermediárias são preguiçosas: elas não são executadas até que uma operação de terminal seja invocada.

  • filter(Predicate): filtra elementos com base em uma condição booleana.
  • map(Function): transforma cada elemento em outro objeto aplicando uma função.
  • sorted(): ordena os elementos do Stream.
Java
List<String> names = Arrays.asList("Marco", "Anna", "Giovanni");
List<String> filtered = names.stream()
                             .filter(name -> name.startsWith("M"))
                             .map(name -> name.toUpperCase())
                             .collect(Collectors.toList()); // "MARCO"

Operações de Terminal Comuns

  • forEach(Consumer): executa uma ação para cada elemento do Stream.
  • collect(Collector): reúne os resultados do Stream em um contêiner (por exemplo, uma lista usando Collectors.toList()).
  • reduce(identity, BinaryOperator): combina os elementos Stream em um único valor cumulativo.
Java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4);
int sum = numbers.stream()
                 .reduce(0, (a, b) -> a + b); // Sums all numbers: 10

Experimente você mesmo

Exercício#java.m7.l2.e1
Tentativas: 0Carregando…

Complete o código usando o fluxo de números para filtrar apenas números pares, reúna-os em uma nova lista chamada pares e imprima-a usando System.out.println.

Carregando editor…
Mostrar dica

Comece chamando `numbers.stream()`, anexe `.filter(n -> n % 2 == 0)` e, finalmente, colete com `.collect(Collectors.toList())`.

Solução disponível após 3 tentativas

Exercício#java.m7.l2.e2
Tentativas: 0Carregando…

Use streams para transformar todos os nomes dentro da lista de nomes em letras maiúsculas usando map e imprima-os um por um usando forEach com uma referência de método.

Carregando editor…
Mostrar dica

Use `.map(s -> s.toUpperCase())` seguido pela operação de terminal `.forEach(System.out::println)`.

Solução disponível após 3 tentativas

Exercício#java.m7.l2.e3
Tentativas: 0Carregando…

Complete o código calculando a soma de todos os números na lista de números usando um Stream e a operação de terminal de redução com um valor inicial de 0. Imprima a soma.

Carregando editor…
Mostrar dica

Use `numbers.stream().reduce(0, (a, b) -> a + b)` e imprima a variável resultante.

Solução disponível após 3 tentativas