Javaでリストを逆の順序で繰り返します
この投稿では、実際にリストを逆にすることなく、Javaでリストを逆の順序で繰り返すさまざまな方法について説明します。
1.使用する ListIterator
The List
インターフェイスは、と呼ばれる特別なイテレータを提供します ListIterator、双方向アクセスを可能にします。私たちは List.listIterator(index) 取得する方法 ListIterator
リスト内の指定された位置から始まるリスト要素の上。最後の要素から開始する必要があるため、開始インデックスはリストのサイズと等しくなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import java.util.Arrays; import java.util.List; import java.util.ListIterator; class Main { //リストを逆の順序で繰り返すJavaプログラム public static void main(String[] args) { List<String> list = Arrays.asList("C", "C++", "Java"); // `ListIterator`を使用して、リストを逆の順序で繰り返します ListIterator<String> itr = list.listIterator(list.size()); //リストに前の要素がある場合、 `hasPrevious()`はtrueを返します while (itr.hasPrevious()) { System.out.println(itr.previous()); } } } |
2.ApacheCommonCollectionsを使用する
ApacheCommonは ReverseListIterator これを使用して、リストを逆の順序で繰り返すことができます。
への最初の呼び出し next()
リストの最後の要素を返します。次の呼び出しは next()
前の要素を返します。 hasNext()
メソッドは、別の要素があるかどうかをチェックします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
import org.apache.commons.collections4.iterators.ReverseListIterator; import java.util.Arrays; import java.util.List; class Main { //リストを逆の順序で繰り返すJavaプログラム public static void main(String[] args) { List<String> list = Arrays.asList("C", "C++", "Java"); ReverseListIterator itr = new ReverseListIterator(list); while (itr.hasNext()) { System.out.println(itr.next()); } } } |
3.forループの使用
私達はことを知っています List
は順序付けられたコレクションであるため、forループを使用して、リスト内のインデックス(位置)で要素にアクセスできます。ここでは、拡張されたforループを使用して、最初の最後から反復することはできないことに注意してください List
それは使用するので Iterator
舞台裏、そして Iterator
双方向ではありません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import java.util.List; import java.util.ArrayList; import java.util.Arrays; class Main { //リストを逆の順序で繰り返すJavaプログラム public static void main(String[] args) { List<String> list = Arrays.asList("C", "C++", "Java"); //forループを使用してリストを逆方向に出力します for (int i = list.size() - 1; i >= 0 ; i--) { System.out.println(list.get(i)); } } } |
4. Java 8 –ストリームの使用
Java 8では、次のことができます。
- を使用してストリームを取得
List.stream()
. - このストリームの要素を
LinkedList
を使用してStream.collect()
. - 内の要素に対してイテレータを取得します
LinkedList
を使用して逆の順序でLinkedList.descendingIterator()
方法。 - を使用してリストの要素に対して印刷操作を実行します
Iterator.forEachRemaining()
すべての要素が処理されるまで。メソッドリファレンスを提供することもできますSystem.out::println
またはラムダ式を渡しますS -> System.out.println(S)
にIterator.forEachRemaining()
.
次のプログラムはそれを示しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
import java.util.Arrays; import java.util.LinkedList; import java.util.List; class Main { //リストを逆の順序で繰り返すJavaプログラム public static void main(String[] args) { List<String> list = Arrays.asList("C", "C++", "Java"); new LinkedList<>(list) // LinkedList .descendingIterator() //イテレータ .forEachRemaining(System.out::println); } } |
以下に示すように、逆の順序で要素を収集するコレクターを作成することもできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; class Main { //リストを逆の順序で繰り返すJavaプログラム public static void main(String[] args) { List<String> list = Arrays.asList("C", "C++", "Java"); list.stream() .collect(Collectors.collectingAndThen(Collectors.toList(), lst -> { Collections.reverse(lst); return lst.stream(); } )) .forEach(System.out::println); } } |
これで、Javaでリストを逆の順序で繰り返すことができます。
関連記事: