Ответ
Да, можно. У Stream<T> есть метод iterator(), который возвращает Iterator<T>. Однако это действие является терминальной операцией и потребляет поток, после чего поток нельзя использовать повторно.
Пример:
Stream<String> stream = Stream.of("a", "b", "c");
Iterator<String> iterator = stream.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
// Попытка вызвать другую терминальную операцию на 'stream' вызовет IllegalStateException
Важные нюансы:
- Поток потребляется: После вызова
iterator()поток считается закрытым. - Порядок в параллельных потоках: Для параллельных стримов (
parallelStream) порядок элементов в возвращаемом итераторе не гарантирован. - Рекомендация: Предпочтительнее использовать методы самого Stream API (например,
forEach,collect) вместо явной работы с итератором, чтобы сохранить преимущества потоковой обработки.