public static <T> Iterable<T> iterableOverIterables(
        final Iterable<? extends Iterable<? extends T>> iterablesIterable)
    {
        Objects.requireNonNull(iterablesIterable, 
            "The iterablesIterable is null");
        return new Iterable<T>()
        {
            @Override
            public Iterator<T> iterator()
            {
                return Iterators.iteratorOverIterables(
                    iterablesIterable.iterator());
            }
        };
    }
public static < T > Iterable < T > iterableOverIterables ( final Iterable < ? extends Iterable < ? extends T > > iterablesIterable ) { Objects . requireNonNull ( iterablesIterable , "The iterablesIterable is null" ) ; return new Iterable < T > ( ) { @ Override public Iterator < T > iterator ( ) { return Iterators . iteratorOverIterables ( iterablesIterable . iterator ( ) ) ; } } ; }
Returns an iterator that combines the iterators that are provided
by the iterables that are provided by the iterator of the given
iterable. Fancy stuff, he?

@param <T> The element type
@param iterablesIterable The iterable over the iterables. May not
provide <code>null</code> iterables.
@return The iterator