Stream.iterate()
Создаёт поток, где каждый элемент вычисляется из предыдущего.
Доступно с: Java 8
Синтаксис
static <T> Stream<T> iterate(T seed, UnaryOperator<T> f)
static <T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| seed | T | Первый элемент. |
| hasNext | Predicate<? super T> | Необязательное условие продолжения (Java 9). |
| next | UnaryOperator<T> | Вычисляет следующий элемент из предыдущего. |
Возвращаемое значение
Stream<T>Последовательный поток.
Примеры
Степени двойки с условием остановки:
void main() {
Stream.iterate(1, n -> n <= 100, n -> n * 2)
.forEach(n -> IO.print(n + " "));
IO.println("");
}Результат:
1 2 4 8 16 32 64Бесконечный поток, ограниченный limit():
void main() {
List<String> labels = Stream.iterate(1, n -> n + 1)
.limit(4)
.map(n -> "Item " + n)
.toList();
IO.println(labels);
}Результат:
[Item 1, Item 2, Item 3, Item 4]Примечания
Версия с двумя аргументами бесконечна — обязательно ограничьте её limit() или takeWhile(), иначе программа зависнет. Версия с условием похожа на цикл for (seed; hasNext; next).
См. также
- Stream.generate() — Создаёт бесконечный поток из значений функции-поставщика.
- Stream.limit() — Обрезает поток до первых N элементов.
- Stream.takeWhile() — Берёт элементы, пока выполняется условие, и останавливается на первом неподходящем.
Вопросы и ответы по теме
В учебнике
- Что такое поток данных — Stream API в Java — источник, промежуточные и завершающие операции, создание потоков, ленивые вычисления и одноразовость потока.