code: public static <T> Iterator<T> filteringIterator(
          Iterator<? extends T> iterator, 
          Predicate<? super T> predicate)
      {
          Objects.requireNonNull(iterator, "The iterator is null");
          Objects.requireNonNull(predicate, "The predicate is null");
          return new FilteringIterator<T>(iterator, predicate);
      }
docs: Creates an iterator that only returns the elements from the
  given iterator to which the given predicate applies.
  
  @param <T> The element type
  @param iterator The delegate iterator
  @param predicate The predicate
  @return The iterator