docs: public static <T> Iterator<T> concat(final Iterator<? extends T>... iterators) {
          return new ImmutableIterator<T>() {
              int current = 0;
  
              @Override
              public boolean hasNext() {
                  advance();
                  return current < iterators.length;
              }
  
              @Override
              public T next() {
                  advance();
                  try {
                      return iterators[current].next();
                  } catch (ArrayIndexOutOfBoundsException e) {
                      throw new NoSuchElementException();
                  }
              }
  
              private void advance() {
                  while (current < iterators.length && !iterators[current].hasNext()) {
                      current++;
                  }
              }
          };
      }