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.
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