Java8 stream API, часть пятая: создание потоков

617px-Manneken_Pis_(crop)В предыдущих статьях о Stream API объекты Stream всегда создавались из Iterable, вызовами stream() или parallelStream(). Однако существуют и другие источники создания Stream.

Stream из файла

В примере с подсчётом числа фильмов, выпущенных в тот или иной год, файл с данными вначале читался в память, в List<String>, и обрабатывался уже из памяти. Это был совершенно лишний шаг, потому что Stream можно создать напрямую из файла:

Для файлов, которые хранятся в файловой системе и для которых есть известный путь, можно использовать класс Files:

Stream из списка файлов

В классе Files существуют и другие методы, возвращающие объект Stream.

Поиск файлов, соответствующих условию:

Или просмотр заданного каталога и отбор записей, соответствующих условию:

Обход всего дерева, начиная с заданной позиции:

Генерация данных

Самый лучший Stream, из случайных чисел:

Или из диапазона целых чисел:

Или из функции:

Stream из массива

Любой массив объектов можно преобразовать в Stream:

Или список аргументов:

Кроме использования стандартных методов создания Stream, можно реализовывать собственные источники данных для Stream, используя низкоуровневый интерфейс Spliterator, но этому будет посвящена отдельная статья.

Код примера доступен на github. Для исполнения требуется скачать IMDB movies.list и положить его в src/resources.