Ответ
Stream API в Java работает с данными из различных источников:
- Коллекции: Любые классы, реализующие интерфейс
Collection(List,Set,Queue).List<String> list = Arrays.asList("a", "b", "c"); Stream<String> streamFromList = list.stream(); - Массивы: Через утилитарный класс
Arrays.String[] array = {"a", "b", "c"}; Stream<String> streamFromArray = Arrays.stream(array); - Примитивные потоки: Специализированные интерфейсы
IntStream,LongStream,DoubleStream.IntStream intStream = IntStream.range(1, 5); // 1, 2, 3, 4 - Файлы: Через методы класса
Files.Stream<String> lines = Files.lines(Paths.get("file.txt")); - Генераторы и итераторы: Методы
Stream.generate(),Stream.iterate().Stream<Double> randomStream = Stream.generate(Math::random).limit(5); - Другие источники: Любые объекты, реализующие интерфейс
IterableилиIterator.
Важно: Stream не хранит данные и не изменяет исходную коллекцию. Операции делятся на промежуточные (lazy, например filter, map) и терминальные (eager, например collect, forEach), которые запускают выполнение конвейера.