docs: public static <T> Iterator<T> dropWhile(final Iterator<? extends T> iterator, final Function1<? super T, Boolean> predicate) {
  		if (iterator == null)
  			throw new NullPointerException("iterator");
  		if (predicate == null)
  			throw new NullPointerException("predicate");
  		return new AbstractIterator<T>() {
  			private boolean headFound = false;
  
  			@Override
  			protected T computeNext() {
  				while (!headFound) {
  					if (!iterator.hasNext())
  						return endOfData();
  					T next = iterator.next();
  					if (!predicate.apply(next)) {
  						headFound = true;
  						return next;
  					}
  				}
  				if (iterator.hasNext()) {
  					return iterator.next();
  				} else {
  					return endOfData();
  				}
  			}
  		};
  	}