public static <GInput, GOutput> Iterator<GOutput> convertedIterator(final Converter<? super GInput, ? extends GOutput> converter,
		final Iterator<? extends GInput> iterator) throws NullPointerException {
		if (converter == null) throw new NullPointerException("converter = null");
		if (iterator == null) throw new NullPointerException("iterator = null");
		return new BaseIterator<GOutput>() {

			@Override
			public boolean hasNext() {
				return iterator.hasNext();
			}

			@Override
			public GOutput next() {
				return converter.convert(iterator.next());
			}

			@Override
			public void remove() {
				iterator.remove();
			}

			@Override
			public String toString() {
				return Objects.toInvokeString("convertedIterator", converter, iterator);
			}

		};
	}