docs: public static <T> Iterator<T> concat(
        final Iterator<? extends Iterator<? extends T>> inputs) {
      checkNotNull(inputs);
      return new Iterator<T>() {
        Iterator<? extends T> current = emptyIterator();
        Iterator<? extends T> removeFrom;
  
        @Override
        public boolean hasNext() {
          // http://code.google.com/p/google-collections/issues/detail?id=151
          // current.hasNext() might be relatively expensive, worth minimizing.
          boolean currentHasNext;
          // checkNotNull eager for GWT
          // note: it must be here & not where 'current' is assigned,
          // because otherwise we'll have called inputs.next() before throwing
          // the first NPE, and the next time around we'll call inputs.next()
          // again, incorrectly moving beyond the error.
          while (!(currentHasNext = checkNotNull(current).hasNext())
              && inputs.hasNext()) {
            current = inputs.next();
          }
          return currentHasNext;
        }
        @Override
        public T next() {
          if (!hasNext()) {
            throw new NoSuchElementException();
          }
          removeFrom = current;
          return current.next();
        }
        @Override
        public void remove() {
          checkRemove(removeFrom != null);
          removeFrom.remove();
          removeFrom = null;
        }
      };
    }