1.はじめに

リストの要素を繰り返すことは、プログラム内で最も一般的なタスクの1つです。

このチュートリアルでは、Javaでこれを行うためのさまざまな方法について説明します。

逆方向に進む

も簡単ですが、順番にリストを順に処理することに焦点を当てます。

2.

for

ループ

まず、https://www.baeldung.com/java-loops[

for

loop]のオプションを確認しましょう。

例として国のリストを定義することから始めましょう。

List<String> countries = Arrays.asList("Germany", "Panama", "Australia");

2.1. 基本的なforループ

繰り返しのための最も一般的なフロー制御ステートメントは基本的な

for

ループです。


for

ループは、セミコロンで区切られた3種類のステートメントを定義します。最初のステートメントは初期化ステートメントです。 2番目のものは終了条件を定義します。最後の文はupdate句です。

ここでは、単純に整数変数をインデックスとして使用しています。

for (int i = 0; i < countries.size(); i++) {
    System.out.println(countries.get(i));
}

初期化では、開始点を指定するために整数変数を宣言する必要があります。この変数は通常リストインデックスとして機能します。

終了条件は、この式が

__false

__theと評価されると、評価後にブール値を返す式です。

update句は、インデックス変数の現在の状態を変更したり、終了時点まで増加または減少させるために使用します。

2.2. 強化された

for

ループ

強化された

for

ループは、リストのすべての要素にアクセスすることを可能にする単純な構造です。これは基本的なforループに似ていますが、より読みやすくコンパクトです。したがって、これはリストをトラバースするために最も一般的に使用されるフォームの1つです。

拡張された

for

ループは基本的な

for

ループよりも単純であることに注意してください。

for (String country : countries) {
    System.out.println(country);
}

3.イテレータ



Iterator


は、内部表現を気にせずにデータ構造を走査するための標準的なインタフェースを提供するデザインパターンです。

このようにデータ構造をトラバースすることには多くの利点があります。その中でも、コードは実装に依存しないことを強調できます。

したがって、

Iterator

はトラバーサルを実行する方法から私たちを抽象化しているので、構造は二分木または二重リンクリストになることができます。このようにして、不快な問題を起こすことなく、コード内のデータ構造を簡単に置き換えることができます。

3.1.

イテレータ

Javaでは、

Iterator

パターンは

java.util.Iterator

クラスに反映されます。これはJavaの

Collection

で広く使われています。

Iterator

には、2つの主要なメソッド、

hasNext()



next()

メソッドがあります。

ここでは、両方の使い方を説明します。

Iterator<String> countriesIterator = countries.iterator();

while(countriesIterator.hasNext()) {
    System.out.println(countriesIterator.next());
}


hasNext()

メソッドは、リストに要素が残っているかどうかをチェックします** 。


next()

メソッド

は、反復

内の次の要素を返します。

3.2.

ListIterator


ListIterator

を使用すると、要素のリストを順方向または逆方向にトラバースすることができます。


ListIterator

forwardを使用してリストをスクロールすると、

Iterator

で使用されているのと同じメカニズムに従います。このようにして、

next()

メソッドを使ってイテレータを前に進め、

hasNext()

メソッドを使ってリストの最後を見つけることができます。

ご覧のとおり、

ListIterator

は以前に使用した

Iterator

と非常によく似ています。

ListIterator<String> listIterator = countries.listIterator();

while(listIterator.hasNext()) {
    System.out.println(listIterator.next());
}

4.

forEach()

4.1.

Iterable.forEach()

  • Java 8以降、私たちはhttps://www.baeldung.com/foreach-java[the

    forEach()

    メソッド]を使用してリストの要素を反復処理することができます** 。このメソッドはhttps://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html[

    Iterable

    ]インタフェースで定義されており、パラメータとしてLambda式を受け入れることができます。

構文はとても簡単です。

countries.forEach(System.out::println);


forEach

関数の前は、Javaのすべてのイテレータはアクティブでした。つまり、特定の条件が満たされるまでデータコレクションを横断するforループまたはwhileループが含まれていました。


Iterable

インターフェースの関数として

forEach

が導入されたため、

Iterable

を実装するすべてのクラスに

forEach

関数が追加されました。

4.2.

Stream.forEach()

値のコレクションをStreamに変換して、

forEach()



map()、

、または

filter().

などの操作にアクセスすることもできます。

ここでは、ストリームの典型的な使い方を説明します。

countries.stream().forEach((c) -> System.out.println(c));

5.まとめ

この記事では、Java APIを使用してリストの要素を反復処理するさまざまな方法を示しました。その中で、私たちは

for

ループ、強化された

__forループ、

Iterator



ListIterator

、そして(Java 8に含まれる)

forEach()__メソッドについて言及しました。

さらに、

Streams



forEach()

メソッドを使用する方法も示しました。

最後に、この記事で使用されているすべてのコードは、https://github.com/eugenp/tutorials/tree/master/core-java-collections[Githubリポジトリ]にあります。