«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как преобразовать итератор в поток без создания копии?

Как преобразовать итератор в поток без создания копии?

Опубликовано 22 ноября 2024 г.
Просматривать:195

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

Преобразование итератора в поток без копирования

Преобразование итератора непосредственно в поток без создания промежуточной копии — желательная операция по соображениям производительности. Вот два эффективных метода достижения такого преобразования:

Метод 1: использование Spliterator

Создайте Spliterator из Iterator, используя класс Spliterators, и используйте его в качестве основы для Поток:

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

Метод 2: использование Iterable

Создайте Iterable из Iterator, используя лямбда-выражение. Iterable — это функциональный интерфейс, который упрощает это преобразование:

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

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

Ключом к тому, чтобы избежать копирования в обоих методах, является то, что они используют класс StreamSupport, который позволяет вам создавать поток напрямую из Spliterator или Iterable без промежуточных манипуляций с коллекциями.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3