android/guava/src/com/google/common/collect/Iterables.java
public static <T> Iterable<T> concat(
      Iterable<? extends T> a, Iterable<? extends T> b, Iterable<? extends T> c) {
    return FluentIterable.concat(a, b, c);
  }
public static <T> Iterable<T> concat(
      Iterable<? extends T> a, Iterable<? extends T> b, Iterable<? extends T> c) {
    return FluentIterable.concat(a, b, c);
  }
public static < T > Iterable < T > concat ( Iterable < ? extends T > a , Iterable < ? extends T > b , Iterable < ? extends T > c ) { return FluentIterable . concat ( a , b , c ) ; }
Combines three iterables into a single iterable. The returned iterable has an iterator that
traverses the elements in {@code a}, followed by the elements in {@code b}, followed by the
elements in {@code c}. The source iterators are not polled until necessary.

<p>The returned iterable's iterator supports {@code remove()} when the corresponding input
iterator supports it.

<p><b>Java 8 users:</b> The {@code Stream} equivalent of this method is {@code
Streams.concat(a, b, c)}.
Combines three iterables into a single iterable . The returned iterable has an iterator that traverses the elements in { @code a } followed by the elements in { @code b } followed by the elements in { @code c } . The source iterators are not polled until necessary .