public static <T> Iterable<T> createReverseIterable(List<T> list) {
        // When the list is empty we can use the "forward" iterable (i.e. the
        // list itself) also as the reverseIterable as it will do nothing.
        if (list.size() == 0) {
            return list;
        }

        return new ReverseIterable<>(list);
    }
Returns an {@link Iterable} with an iterator iterating the given list
from the end to the start.
<p>
I.e. the iterator does the reverse of the {@link List#iterator()}.

@param <T>
@param list
@return a reverse {@link Iterable} of the list
stroom-core-client-widget/src/main/java/stroom/widget/htree/client/treelayout/internal/util/IterableUtil.java