/** * Returns a view of this immutable list in reverse order. For example, {@code ImmutableList.of(1, * 2, 3).reverse()} is equivalent to {@code ImmutableList.of(3, 2, 1)}. * * @return a view of this immutable list in reverse order * @since 7.0 */ public ImmutableList<E> reverse() { return (size() <= 1) ? this : new ReverseImmutableList<E>(this); }
@Override public E get(int index) { checkElementIndex(index, size()); return forwardList.get(reverseIndex(index)); }
@Override public UnmodifiableListIterator<E> listIterator(int index) { checkPositionIndex(index, size); final UnmodifiableListIterator<E> forward = forwardList.listIterator(reversePosition(index)); return new UnmodifiableListIterator<E>() { @Override public boolean hasNext() { return forward.hasPrevious(); } @Override public boolean hasPrevious() { return forward.hasNext(); } @Override public E next() { return forward.previous(); } @Override public int nextIndex() { return reverseIndex(forward.previousIndex()); } @Override public E previous() { return forward.next(); } @Override public int previousIndex() { return reverseIndex(forward.nextIndex()); } }; }
@Override public UnmodifiableListIterator<E> listIterator(int index) { Preconditions.checkPositionIndex(index, size); final UnmodifiableListIterator<E> forward = forwardList.listIterator(reversePosition(index)); return new UnmodifiableListIterator<E>() { @Override public boolean hasNext() { return forward.hasPrevious(); } @Override public boolean hasPrevious() { return forward.hasNext(); } @Override public E next() { return forward.previous(); } @Override public int nextIndex() { return reverseIndex(forward.previousIndex()); } @Override public E previous() { return forward.next(); } @Override public int previousIndex() { return reverseIndex(forward.nextIndex()); } }; }
@Override public UnmodifiableListIterator<E> listIterator(int index) { Preconditions.checkPositionIndex(index, size); final UnmodifiableListIterator<E> forward = forwardList.listIterator(reversePosition(index)); return new UnmodifiableListIterator<E>() { @Override public boolean hasNext() { return forward.hasPrevious(); } @Override public boolean hasPrevious() { return forward.hasNext(); } @Override public E next() { return forward.previous(); } @Override public int nextIndex() { return reverseIndex(forward.previousIndex()); } @Override public E previous() { return forward.next(); } @Override public int previousIndex() { return reverseIndex(forward.nextIndex()); } }; }
private int reversePosition(int index) { return size() - index; }
private int reverseIndex(int index) { return (size() - 1) - index; }
private int reverseIndex(int index) { return (size() - 1) - index; }
private int reversePosition(int index) { return size() - index; }
private int reverseIndex(int index) { return (size() - 1) - index; }
private int reverseIndex(int index) { return (size() - 1) - index; }
private int reversePosition(int index) { return size() - index; }
private int reverseIndex(int index) { return (size() - 1) - index; }
private int reversePosition(int index) { return size() - index; }
private int reverseIndex(int index) { return (size() - 1) - index; }
private int reversePosition(int index) { return size() - index; }
private int reversePosition(int index) { return size() - index; }
private int reverseIndex(int index) { return (size() - 1) - index; }
private int reversePosition(int index) { return size() - index; }
private int reverseIndex(int index) { return (size() - 1) - index; }