我想在列表上有一个反向列表视图(以类似于在List#sublist列表上提供子列表视图的方式)。是否有提供此功能的功能?
List#sublist
我不想制作列表的任何副本,也不想修改列表。
不过,在这种情况下,如果我能在列表中至少获得一个反向迭代器就足够了。
另外,我知道如何自己实现这一点。我只是问Java是否已经提供了类似的东西。
演示实现:
static <T> Iterable<T> iterableReverseList(final List<T> l) { return new Iterable<T>() { public Iterator<T> iterator() { return new Iterator<T>() { ListIterator<T> listIter = l.listIterator(l.size()); public boolean hasNext() { return listIter.hasPrevious(); } public T next() { return listIter.previous(); } public void remove() { listIter.remove(); } }; } }; }
我刚刚发现某些List实现具有descendingIterator()我所需要的。虽然对于List. 这有点奇怪,因为我看到的实现LinkedList足够通用,可以与任何List.
List
descendingIterator()
LinkedList
番石榴提供了这个:Lists.reverse(List)
List<String> letters = ImmutableList.of("a", "b", "c"); List<String> reverseView = Lists.reverse(letters); System.out.println(reverseView); // [c, b, a]
与 不同Collections.reverse,这纯粹是一个 视图......它不会改变原始列表中元素的顺序。此外,对于可修改的原始列表,对原始列表和视图的更改都会反映在另一个中。
Collections.reverse