Создание 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();