code: @Pure
  	public static <T> Iterator<T> take(final Iterator<T> iterator, final int count) {
  		if (iterator == null)
  			throw new NullPointerException("iterator");
  		if (count < 0)
  			throw new IllegalArgumentException("Cannot take a negative number of elements. Argument 'count' was: "
  					+ count);
  		if (count == 0)
  			return ImmutableSet.<T>of().iterator();
  		return new AbstractIterator<T>() {
  
  			private int remaining = count;
  
  			@Override
  			protected T computeNext() {
  				if (remaining <= 0)
  					return endOfData();
  				if (!iterator.hasNext())
  					return endOfData();
  				remaining--;
  				return iterator.next();
  			}
  		};
  	}
docs: Returns a view on this iterator that provides at most the first <code>count</code> entries.
  
  @param iterator
  the iterator. May not be <code>null</code>.
  @param count
  the number of elements that should be returned at most.
  @return an iterator with <code>count</code> elements. Never <code>null</code>.
  @throws IllegalArgumentException
  if <code>count</code> is negative.