1. ホーム

[解決済み】Javaでリストに反転したリストビューを取得する方法は?

2022-04-21 01:24:18

質問

リスト上で反転したリストビューを表示させたいのですが、どうすればよいでしょうか? 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 .

解決方法は?

グアバ はこれを提供します。 Lists.reverse(リスト)

List<String> letters = ImmutableList.of("a", "b", "c");
List<String> reverseView = Lists.reverse(letters); 
System.out.println(reverseView); // [c, b, a]

とは異なり Collections.reverse であり、これは純粋に ビュー ... 元のリストの要素の順序を変更することはありません。さらに、元のリストが変更可能であれば、元のリストとビューの両方に対する変更は、もう一方に反映されます。