Помимо заказа, использование немного отличается. Давайте посмотрим на сигнатуры методов:
iterate(int seed, IntUnaryOperator f)
generate(IntSupplier s)
Итерация явно дала начальное значение в качестве параметра и унарный оператор, которыйиспользуется для генерации следующего значения из предыдущего. Здесь оператор легко может быть неизменным без внутреннего состояния и может быть повторно использован в нескольких местах параллельно без каких-либо проблем.
Генерация использует поставщик. Они могут предоставлять либо постоянные, либо случайные числа, либо должны иметь внутреннее состояние для обеспечения ряда, подобного (1, 2, 3, ...).