8.6 Conhecendo mais métodos do Stream

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.

原文链接:8.6 Conhecendo mais métodos do Stream

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
So what if we fall down? At least we are still young.
摔倒了又怎样,至少我们还年轻
评论 抢沙发

请登录后发表评论

    暂无评论内容