Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

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)

Параметры

ПараметрТипОписание
seedTПервый элемент.
hasNextPredicate<? super T>Необязательное условие продолжения (Java 9).
nextUnaryOperator<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 — источник, промежуточные и завершающие операции, создание потоков, ленивые вычисления и одноразовость потока.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.