Иногда требуется преобразовать объект типа Iterator в Stream. Для этих целей в Java есть вспомогательный метод StreamSupport.stream:

public static <T> Stream<T> stream(Spliterator<T> spliterator, boolean parallel)

Первый аргумент это объект типа Spliterator. Мы его получим из Iterator/Iterable. Второй аргумент включает параллельную обработку Stream.

Преобразование Iterator в Stream

public static <T> Stream<T> asStream(Iterator<T> sourceIterator) {
    Iterable<T> iterable = () -> sourceIterator;
    return StreamSupport.stream(iterable.spliterator(), false);
}

Проверка:

List<String> list = Arrays.asList("Alice", "Bob", "Carl");

Iterator<String> iterator = list.iterator();

asStream(iterator)
        .map(name -> "Hello, " + name + "!")
        .forEach(System.out::println);

Преобразование Iterable в Stream

public static <T> Stream<T> asStream(Iterable<T> sourceIterable) {
    return StreamSupport.stream(sourceIterable.spliterator(), false);
}

Проверка:

List<String> list = Arrays.asList("Alice", "Bob", "Carl");

asStream(list)
        .map(name -> "Hello, " + name + "!")
        .forEach(System.out::println);

Исходный код

import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;

public class IteratorToStreamExample {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("Alice", "Bob", "Carl");

        Iterator<String> iterator = list.iterator();

        asStream(iterator)
                .map(name -> "Hello, " + name + "!")
                .forEach(System.out::println);

        asStream(list)
                .map(name -> "Hello, " + name + "!")
                .forEach(System.out::println);
    }

    public static <T> Stream<T> asStream(Iterator<T> sourceIterator) {
        if (sourceIterator == null) {
            return Stream.empty();
        }
        Iterable<T> iterable = () -> sourceIterator;
        return StreamSupport.stream(iterable.spliterator(), false);
    }

    public static <T> Stream<T> asStream(Iterable<T> sourceIterable) {
        if (sourceIterable == null) {
            return Stream.empty();
        }
        return StreamSupport.stream(sourceIterable.spliterator(), false);
    }
}

Заключение

С помощью метода StreamSupport.stream довольно просто преобразовать Iterator или Iterable в Stream.

Конвертация Iterator в Stream