支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡


【Java】 拡張for文・forEachメソッドについて

for文、拡張for文、forEachメソッドは、繰り返し行うループ処理を実行する為の構文です。 「Java8」からラムダ式と、ラムダ式と共に使用する「forEach」メソッドが追加されました。

【Java】 拡張for文

拡張for文は、配列やListなどのコレクション全ての要素に対して順番に繰り返し処理を行う為に使用します。 拡張for文の構文は次のように記述します。 拡張for文は基本のfor文と違い条件式とカウンタ変数を記述しない為、全ての要素に対して処理を行います。


【Java】 拡張for文の基本式

1. for (型 変数名 : コレクション名){
2.    // 繰り返し行う処理
3. }

【Java】 拡張for文の具体例

1. int n[] = {100, 150, 300};
2. for (int x : n){
3. System.out.println(x);
4. }

実行結果

100
150
300

【Java】 forEachメソッド

Javaの繰り返し処理にはfor文、拡張for文などがありましたが、 「Java8」からラムダ式と、ラムダ式と共に使用する「forEach」メソッドが追加されました。 forEachメソッドとラムダ式を使用することでより簡単にかつ簡潔に繰り返し処理を行えるようになりました。 forEachメソッドを使用したラムダ式の構文は以下の通りです。

【Java】 forEachメソッドの基本式

1. コレクション名.forEach(引数 ー> 繰り返し行う処理)

【Java】 拡張for文とforEachメソッドの比較した具体例

forEachメソッドはそのままでは配列に使用することができないので、「List」に変換するか、「StreamAPI」の「Arrays.stream()」メソッドを使用する必要があります。 ただし、「ArrayList」はプリミティブ型(int型、char型etc)が使用できず、「asList()」メソッドも同様にラッパークラスでないと使用できません。

ArrayListを使用した場合
1. import java.util.ArrayList;
2. import java.util.List;
3.
4. public class Main {
5.
6.   public static void main(String[] args) {
7.
8.     List<String> list = new ArrayList<>();
9.
10.     list.add("せ");
11.     list.add("い");
12.     list.add("か");
13.     list.add("い");
14.
15.     // 拡張for文
16.     System.out.println("拡張for文の場合");
17.     for (String s : list) {
18.      System.out.println(s);
19.      }
20.
21.     // forEachメソッド
22.     System.out.println("forEachメソッドの場合");
23.     list.forEach(s ー> System.out.println(s));
24.  }
25. }

実行結果

1.拡張for文の場合
2. せ
3. い
4. か
5. い
6.forEachメソッドの場合
7. せ
8. い
9. か
10. い

forEachメソッドとラムダ式を使用し、Listの全ての要素を順番に表示させています。 具体例のように、forEachメソッドとラムダ式を使用することでループ処理が1行で簡潔に記述することが可能となりました。

配列を使用した場合
1. import java.util.Arrays;
2. public class Main {
3.
4.  public static void main(String[] args) {
5.   // 配列
6.   int list[] = {10, 20, 30, 40, 50};
7.
8.  Arrays.stream(list).forEach(n ー> System.out.println(n));
9.
10.  }
11.}

実行結果

1. 10
2. 20
3. 30
4. 40
5. 50

【補足】 ラムダ式

ラムダ式はJava8から追加された記述方式です。ラムダ式を使用するとメソッドを変数と同様に扱うことができ、記述を簡略化することが可能です。

ラムダ式のメリット


関数型インターフェースを実装するのためのソースコードを簡略化することが可能。
※「関数型インターフェース」とは抽象メソッドを1つ持つインターフェースのこと

ラムダ式の基本構文

1. インターフェース名 オブジェクト名 = (引数1, 引数2, ・・・) ー> {return 処理内容};

※引数の型の記述はおこないません。 「引数の型」は「コンパイラー」によって類推されるので、記述する必要がないのがラムダ式の特徴です。 ただ、従来のように引数の型を記述してもコンパイルエラーになることもありません。

【まとめ】

いかがでしたでしょうか。今回は拡張for文・forEachメソッドについて記載いたしました。 「forEach」メソッドは「Java8」から追加されました。 forEachメソッドとラムダ式を使用することでより簡単にかつ簡潔に繰り返し処理を行えるようになりました。 これから良く使われていきますので今のうちから慣れておいてはいかがでしょうか。