"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como converter um iterador em um fluxo sem criar uma cópia?

Como converter um iterador em um fluxo sem criar uma cópia?

Publicado em 2024-11-22
Navegar:520

How to Convert an Iterator to a Stream Without Creating a Copy?

Converter um iterador em fluxo sem copiar

Converter um iterador diretamente em um fluxo sem criar uma cópia intermediária é uma operação desejável por motivos de desempenho. Aqui estão dois métodos eficazes para obter essa conversão:

Método 1: Usando Spliterator

Crie um Spliterator a partir do Iterator usando a classe Spliterators e use-o como base para o fluxo:

Iterator sourceIterator = Arrays.asList("A", "B", "C").iterator();
Stream targetStream = StreamSupport.stream(
          Spliterators.spliteratorUnknownSize(sourceIterator, Spliterator.ORDERED),
          false);

Método 2: Usando Iterable

Crie um Iterable a partir do Iterador usando uma expressão lambda. Iterable é uma interface funcional, o que torna essa conversão simples:

Iterator sourceIterator = Arrays.asList("A", "B", "C").iterator();

Iterable iterable = () -> sourceIterator;
Stream targetStream = StreamSupport.stream(iterable.spliterator(), false);

A chave para evitar uma cópia em ambos os métodos é que eles utilizam a classe StreamSupport, que permite criar um Stream diretamente de um Spliterator ou Iterable sem manipulação de coleção intermediária.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3