code: public static <T> Iterator<T> concat(Iterator<? extends T>... inputs) {
      for (Iterator<? extends T> input : checkNotNull(inputs)) {
        checkNotNull(input);
      }
      return concat(new ConsumingQueueIterator<Iterator<? extends T>>(inputs));
    }
docs: Combines multiple iterators into a single iterator. The returned iterator
  iterates across the elements of each iterator in {@code inputs}. The input
  iterators are not polled until necessary.
  
  <p>The returned iterator supports {@code remove()} when the corresponding
  input iterator supports it.
  
  @throws NullPointerException if any of the provided iterators is null