public static <T> Iterator<T> concat(Iterator<? extends T> a, Iterator<? extends T> b) {
    """
	Combines two iterators into a single iterator. The returned iterator iterates across the
	elements in {@code a}, followed by the elements in {@code b}. The source iterators are not
	polled until necessary.
	
	<p>The returned iterator supports {@code remove()} when the corresponding input iterator
	supports it.
    """
    checkNotNull(a);
    checkNotNull(b);
    return concat(consumingForArray(a, b));
  }
public static <T> Iterator<T> concat(Iterator<? extends T> a, Iterator<? extends T> b) {
    checkNotNull(a);
    checkNotNull(b);
    return concat(consumingForArray(a, b));
  }
public static < T > Iterator < T > concat ( Iterator < ? extends T > a , Iterator < ? extends T > b ) { checkNotNull ( a ) ; checkNotNull ( b ) ; return concat ( consumingForArray ( a , b ) ) ; }
Combines two iterators into a single iterator. The returned iterator iterates across the
elements in {@code a}, followed by the elements in {@code b}. The source iterators are not
polled until necessary.

<p>The returned iterator supports {@code remove()} when the corresponding input iterator
supports it.
Combines two iterators into a single iterator . The returned iterator iterates across the elements in { @code a } followed by the elements in { @code b } . The source iterators are not polled until necessary .