code: @NotNull
      public static <T> Stream<T> iterate(
              @Nullable final T seed,
              @NotNull final UnaryOperator<T> op) {
          Objects.requireNonNull(op);
          return new Stream<T>(new ObjIterate<T>(seed, op));
      }
docs: Creates a {@code Stream} by iterative application {@code UnaryOperator} function
  to an initial element {@code seed}. Produces {@code Stream} consisting of
  {@code seed}, {@code op(seed)}, {@code op(op(seed))}, etc.
  
  <p>Example:
  <pre>
  seed: 1
  op: (a) -&gt; a + 5
  result: [1, 6, 11, 16, ...]
  </pre>
  
  @param <T> the type of the stream elements
  @param seed  the initial value
  @param op  operator to produce new element by previous one
  @return the new stream
  @throws NullPointerException if {@code op} is null