code: public static <T> Iterator<T> weakeningIterator(
          final Iterator<? extends T> delegate)
      {
          Objects.requireNonNull(delegate, "The delegate is null");
          return new Iterator<T>()
          {
              @Override
              public boolean hasNext()
              {
                  return delegate.hasNext();
              }
      
              @Override
              public T next()
              {
                  return delegate.next();
              }
      
              @Override
              public void remove()
              {
                  delegate.remove();
              }
          };
      }
docs: Returns an iterator that removes the type bound
  of another iterator
  
  @param <T> The element type
  @param delegate The delegate iterator
  @return The new iterator