public static <E> Iterator<E> filter(Iterator<E> iterator, Predicate<E> predicate) {
        return new FilteringIterator<E>(iterator, predicate);
    }
public static < E > Iterator < E > filter ( Iterator < E > iterator , Predicate < E > predicate ) { return new FilteringIterator < E > ( iterator , predicate ) ; }
Creates an iterator yielding elements from the source iterator matching
the given predicate. This transformation is applied lazily and the
predicate is applied while consuming returned iterator. E.g:
<code>filter([1,2,3,4], isEven) -> [2,4]</code>

@param <E> the iterator element type
@param iterator the iterator where elements are fetched from
@param predicate the predicate applied to each element
@return an iterator containing the elements for which the predicate
evaluates to true