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.