code: public static <S, T> Iterator<T> transformingIterator(
          Iterator<? extends S> iterator, 
          Function<S, ? extends T> function)
      {
          Objects.requireNonNull(iterator, "The iterator is null");
          Objects.requireNonNull(function, "The function is null");
          return new TransformingIterator<S, T>(iterator, function);
      }
docs: Creates an iterator that passes the values that are provided
  by the given delegate iterator to the given function, and
  returns the resulting values
  
  @param <S> The element type
  @param <T> The value type
  @param iterator The delegate iterator
  @param function The function
  @return The iterator