Создание Stream

Создание Stream
Есть несколько способов создать поток с использованием Stream API. Например, вы можете создать поток из коллекции с помощью метода stream() или из массива с помощью метода of(). Как только у вас есть поток, вы можете выполнять различные операции с помощью методов, предоставляемых Stream API.


От коллекции
Вы можете создать поток из любой коллекции Java, например, списка или множества, с помощью метода stream().


Collection<Integer> list = new ArrayList<>();
Stream<Integer> stream = list.stream();


Из массива
Поток может быть создан из массива с помощью метода Arrays.stream().


int[] numbers = {1, 2, 3};
Stream<Integer> stream = Arrays.stream(numbers).boxed();


Из строки
Поток может быть создан из строки с помощью метода chars(), который возвращает IntStream.


String str = "Hello";
IntStream stream = str.chars();


Из файла
Поток может быть создан из строк файла с помощью метода Files.lines().


Path path = Paths.get("file.txt");
Stream stream = Files.lines(path);


Stream из Iterator-а
Многие источники данных хорошо делятся на части, что позволяет использовать преимущества параллельной обработки. Однако такие источники, как Files.lines(), Files.find(), Files.walk(), Files.list(), BufferedReader().lines(), Pattern.splitAsStream(), создают вначале Iterator, который затем трансформируется в Spliterator.
Проблема в том, что Iterator не содержит информации о размере исходного набора данных. Тем временем, для эффективной работы, Spliterator предполагает наличие информации о размере. Без этой информации Spliterator не может эффективно разбивать данные на части, что может привести к снижению эффективности параллелизма или даже к его полному отсутствию.


Генерирование
Поток может быть создан с помощью метода Stream.generate(Supplier). Supplier должен возвращать новое значение при каждом вызове.


Stream stream = Stream.generate(() -> new Random().nextInt());


Билдер
Поток может быть создан с помощью Stream.Builder.


Stream.Builder builder = Stream.builder();
builder.add(1);builder.add(2);builder.add(3);Stream stream = builder.build();