Introdução aos Métodos do Stream
- O capítulo apresenta métodos adicionais da API Stream do Java 8.
- Nem todos os métodos são cobertos, mas são destacados os mais interessantes.
- Discutem-se boas práticas no uso de streams.
1. Trabalhando com Iterators
- Erro ao usar enhanced for com Stream:
- Stream não implementa Iterable, gerando erro de compilação.
-
Motivo: Streams não podem ser reutilizados após operações terminais (ex: segunda invocação lança IllegalStateException).
-
Uso de Iterator:
Obtenção via iterator():
Iterator<Usuario> i = usuarios.stream().iterator();Iterator<Usuario> i = usuarios.stream().iterator();Iterator<Usuario> i = usuarios.stream().iterator();
Enter fullscreen mode Exit fullscreen mode
- Método forEachRemaining: Permite percorrer elementos com um Consumer (ex: System.out::println).
Quando usar Iterator?
- Modificar objetos em streams paralelos (evitar efeitos colaterais).
- Compatibilidade com APIs que exigem Iterator.
2. Testando Predicados
Métodos para verificação condicional:
- anyMatch(Predicate): Verifica se pelo menos um elemento atende ao predicado (ex: usuarios.stream().anyMatch(Usuario::isModerador)).
- allMatch(Predicate): Verifica se todos os elementos atendem ao predicado.
- noneMatch(Predicate): Verifica se nenhum elemento atende ao predicado.
- Eficiência: Processamento interrompido assim que a condição é resolvida (ex: anyMatch para ao encontrar o primeiro moderador).
3. Outros Métodos Úteis
Operações básicas:
- count(): Retorna a quantidade de elementos no Stream.
- skip(n): Ignora os primeiros n elementos.
- limit(n)**: Limita o Stream a n` elementos.
Criação de Streams:
- Stream.empty(): Cria um Stream vazio.
- Stream.of(elementos…): Cria um Stream a partir de elementos (ex: Stream.of(user1, user2)).
- Stream.concat(stream1, stream2): Concatena dois Streams.
Fontes externas:
- Files.lines(): Stream de linhas de arquivo.
- Pattern.splitAsStream(): Stream via Regex.
- Arrays.stream(array): Stream a partir de arrays.
4. Gerenciamento de Recursos
Streams e IO:
- Streams originados de recursos externos (ex: arquivos) implementam AutoCloseable.
- Obrigatório: Usar try-with-resources ou finally para fechar o Stream. Exemplo:
try (Stream<String> lines = Files.lines(Paths.get("arquivo.txt"))) {
// processamento
}
Obs: Streams de coleções não exigem fechamento explícito.
5. Considerações Finais
- API extensa: A interface Stream possui métodos para diversas necessidades.
- Recomendação: Explorar a documentação da API para descobrir métodos úteis em cada contexto.
- Cuidados com streams paralelos: Evitar modificações de estado para garantir resultados determinísticos.
© 版权声明
THE END
暂无评论内容