public static <T> Iterable<T> reverse(final List<T> list) {
    return () -> {
      final ListIterator<T> listIterator = list.listIterator(list.size());

      return new Iterator<T>() {
        @Override
        public boolean hasNext() {
          return listIterator.hasPrevious();
        }

        @Override
        public T next() {
          return listIterator.previous();
        }

        @Override
        public void remove() {
          listIterator.remove();
        }
      };
    };
  }
(Partial) replacement for Arrays.copyOfRange, which is only available in JDK6.
spock-core/src/main/java/org/spockframework/util/CollectionUtil.java