Конвертация Iterator в Stream
[Конвертация Iterator в Stream]
Иногда требуется преобразовать объект типа 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
Комментарии 0