0Pricing
Java Academy · Aula

Armadilhas comuns

Evite erros frequentes com Streams: reutilização de fluxos, efeitos colaterais ocultos e uso de estado mutável em paralelo.

Armadilhas comuns é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 3 de 3. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Java Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Java Academy inclui 3 aulas no total.

Introdução

Os fluxos são poderosos, mas têm armadilhas: reutilizar um fluxo, efeitos colaterais ocultos e combinar paralelismo com estado mutável.

Fluxos de uso único

Um fluxo é de uso único: depois de uma operação terminal (forEach, collect, reduce), ele não pode ser usado novamente.

Código: erro ao reutilizar

Depois de uma operação terminal, o fluxo é consumido; tentar reutilizá-lo lança IllegalStateException.

import java.util.*;import java.util.stream.*;public class Main {
  public static void main(String[] args) {
    List<Integer> nums = Arrays.asList(1, 2, 3);
    Stream<Integer> s = nums.stream();
    s.forEach(System.out::println); // terminal
    try {
      s.forEach(System.out::println); // reuse -> IllegalStateException
    } catch (IllegalStateException e) {
      System.out.println("Oops: " + e.getMessage());
    }
  }
}

Efeitos colaterais

Evite efeitos colaterais dentro de map/filter, como modificar listas externas. Prefira funções puras e collect() ao final.

Código: efeitos colaterais versus collect

Modificar o estado no fluxo de processamento é frágil. A versão com collect() é mais clara e segura.

import java.util.*;import java.util.stream.*;public class Main {
  public static void main(String[] args) {
    List<Integer> nums = Arrays.asList(1,2,3);
    // Pitfall: mutating external list from map/forEach
    List<Integer> out = new ArrayList<>();
    nums.stream().map(n -> { out.add(n*n); return n*n; }).forEach(x -> {});
    System.out.println("With side effects: " + out);

    // Better: use collect to build the result
    List<Integer> squares = nums.stream().map(n -> n*n).collect(Collectors.toList());
    System.out.println("With collect: " + squares);
  }
}

Código: paralelo + estado mutável

Fluxos paralelos e contêineres mutáveis podem causar condições de corrida. Prefira collect(), que lida com a concorrência.

import java.util.*;public class Main {
  public static void main(String[] args) {
    List<Integer> nums = java.util.Arrays.asList(1,2,3,4,5);
    // Pitfall: adding to a normal ArrayList from parallel pipeline (unsafe)
    List<Integer> unsafe = new ArrayList<>();
    nums.parallelStream().forEach(n -> unsafe.add(n)); // may be unsafe
    System.out.println("Parallel add to ArrayList (unsafe demo): " + unsafe);

    // Safer: use built-in collectors
    List<Integer> safe = nums.parallelStream().map(n -> n).collect(java.util.stream.Collectors.toList());
    System.out.println("Collected safely: " + safe);
  }
}

Verificação das armadilhas

Verificação rápida: qual é uma armadilha comum dos fluxos para iniciantes?

Revisão

Revisão: 1) os fluxos são de uso único. 2) evite efeitos colaterais nos fluxos de processamento. 3) não combine fluxos paralelos com estado mutável inseguro.

Perguntas Frequentes

A aula “Armadilhas comuns” é grátis?

Sim — o texto completo de “Armadilhas comuns” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Java Academy, atualize para CoddyKit PRO. O curso de Java Academy inclui 3 aulas no total.

O que vou aprender em “Armadilhas comuns”?

Evite erros frequentes com Streams: reutilização de fluxos, efeitos colaterais ocultos e uso de estado mutável em paralelo. Você pratica Java Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Java Academy?

Nenhuma experiência prévia é necessária. Java Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 3.

Quanto tempo leva a aula “Armadilhas comuns”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Java Academy?

Sim. Cada aula de Java Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Ordenação e avaliação de curto-circuito
  2. Noções básicas de fluxos paralelos
  3. Armadilhas comuns
← Voltar para Java Academy