Преобразование итератора в поток без копирования
Преобразование итератора непосредственно в поток без создания промежуточной копии — желательная операция по соображениям производительности. Вот два эффективных метода достижения такого преобразования:
Метод 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