docs: public static <T> UnmodifiableIterator<T> filter(
        final Iterator<T> unfiltered, final Predicate<? super T> predicate) {
      checkNotNull(unfiltered);
      checkNotNull(predicate);
      return new AbstractIterator<T>() {
        @Override protected T computeNext() {
          while (unfiltered.hasNext()) {
            T element = unfiltered.next();
            if (predicate.apply(element)) {
              return element;
            }
          }
          return endOfData();
        }
      };
    }