public static <T> PrefetchableIterator<T> concat(Iterator<T>... iterators) {
    for (int i = 0; i < iterators.length; ++i) {
      if (iterators[i] == null) {
        throw new IllegalArgumentException("Iterator at position " + i + " was null.");
      }
    }
    if (iterators.length == 0) {
      return emptyIterator();
    } else if (iterators.length == 1) {
      return maybePrefetchable(iterators[0]);
    }
    return concatIterators(Arrays.asList(iterators).iterator());
  }
@Test
  public void testConcat() {
    verifyIterator(PrefetchableIterators.concat());

    PrefetchableIterator<String> instance = PrefetchableIterators.fromArray("A", "B");
    assertSame(PrefetchableIterators.concat(instance), instance);

    verifyIterator(
        PrefetchableIterators.concat(
            PrefetchableIterators.fromArray(),
            PrefetchableIterators.fromArray(),
            PrefetchableIterators.fromArray()));
    verifyIterator(
        PrefetchableIterators.concat(
            PrefetchableIterators.fromArray("A", "B"),
            PrefetchableIterators.fromArray(),
            PrefetchableIterators.fromArray()),
        "A",
        "B");
    verifyIterator(
        PrefetchableIterators.concat(
            PrefetchableIterators.fromArray(),
            PrefetchableIterators.fromArray("C", "D"),
            PrefetchableIterators.fromArray()),
        "C",
        "D");
    verifyIterator(
        PrefetchableIterators.concat(
            PrefetchableIterators.fromArray(),
            PrefetchableIterators.fromArray(),
            PrefetchableIterators.fromArray("E", "F")),
        "E",
        "F");
    verifyIterator(
        PrefetchableIterators.concat(
            PrefetchableIterators.fromArray(),
            PrefetchableIterators.fromArray("C", "D"),
            PrefetchableIterators.fromArray("E", "F")),
        "C",
        "D",
        "E",
        "F");
    verifyIterator(
        PrefetchableIterators.concat(
            PrefetchableIterators.fromArray("A", "B"),
            PrefetchableIterators.fromArray(),
            PrefetchableIterators.fromArray("E", "F")),
        "A",
        "B",
        "E",
        "F");
    verifyIterator(
        PrefetchableIterators.concat(
            PrefetchableIterators.fromArray("A", "B"),
            PrefetchableIterators.fromArray("C", "D"),
            PrefetchableIterators.fromArray()),
        "A",
        "B",
        "C",
        "D");
    verifyIterator(
        PrefetchableIterators.concat(
            PrefetchableIterators.fromArray("A", "B"),
            PrefetchableIterators.fromArray("C", "D"),
            PrefetchableIterators.fromArray("E", "F")),
        "A",
        "B",
        "C",
        "D",
        "E",
        "F");
  }