private static <T> FluentIterable<T> concatNoDefensiveCopy(
      final Iterable<? extends T>... inputs) {
    for (Iterable<? extends T> input : inputs) {
      checkNotNull(input);
    }
    return new FluentIterable<T>() {
      @Override
      public Iterator<T> iterator() {
        return Iterators.concat(
            /* lazily generate the iterators on each input only as needed */
            new AbstractIndexedListIterator<Iterator<? extends T>>(inputs.length) {
              @Override
              public Iterator<? extends T> get(int i) {
                return inputs[i].iterator();
              }
            });
      }
    };
  }
private static <T> FluentIterable<T> concatNoDefensiveCopy(
      final Iterable<? extends T>... inputs) {
    for (Iterable<? extends T> input : inputs) {
      checkNotNull(input);
    }
    return new FluentIterable<T>() {
      @Override
      public Iterator<T> iterator() {
        return Iterators.concat(
            
            new AbstractIndexedListIterator<Iterator<? extends T>>(inputs.length) {
              @Override
              public Iterator<? extends T> get(int i) {
                return inputs[i].iterator();
              }
            });
      }
    };
  }
private static < T > FluentIterable < T > concatNoDefensiveCopy ( final Iterable < ? extends T > ... inputs ) { for ( Iterable < ? extends T > input : inputs ) { checkNotNull ( input ) ; } return new FluentIterable < T > ( ) { @ Override public Iterator < T > iterator ( ) { return Iterators . concat ( /* lazily generate the iterators on each input only as needed */ new AbstractIndexedListIterator < Iterator < ? extends T > > ( inputs . length ) { @ Override public Iterator < ? extends T > get ( int i ) { return inputs [ i ] . iterator ( ) ; } } ) ; } } ; }
Concatenates a varargs array of iterables without making a defensive copy of the array.
Concatenates a varargs array of iterables without making a defensive copy of the array .