Бесконечные потоки
Stream infiniteStream = Stream.iterate(0, i -> i + 2);
List intList = infiniteStream
.limit(10)
.collect(Collectors.toList());
// 0, 2, 4, 6, 8, 10, 12, 14, 16, 18
Supplier randomUUIDSupplier = UUID::randomUUID;
Stream infiniteUUIDStream = Stream.generate(randomUUIDSupplier);
List uuidList = infiniteUUIDStream
.skip(10) // пропустить первые 10
.limit(10)
.collect(Collectors.toList());
Интерфейс Stream имеет два статических метода для генерации бесконечных потоков: iterate() и generate().
iterate(final T seed, final UnaryOperator
generate(Supplier extends T> s) возвращает бесконечный последовательный неупорядоченный поток, в котором каждый элемент создается предоставленным поставщиком (Supplier). Это подходит для генерации константных потоков, потоков случайных элементов и т. д.
📌 При работе с бесконечными потоками, крайне важно вызвать метод limit() перед вызовом терминальной операции, иначе наша программа будет работать бесконечно.