[Java] 基礎 for / 拡張for / forEach の使い方
for , 拡張for , forEach (ラムダ式) は、同じ処理を繰り返し行うループ処理を実行させるための構文。
Java8 から、ラムダ式と、ラムダ式と共に使う forEach メソッドが追加された。( forEach (ラムダ式)は Java8 以降出ないと使えないよ。)
Contents
for 文の使い方
変数を省略できたりするので、書き方が複数ある。
基本形
for(int i = 0; i < 5; i++) {
System.out.println(i+"回目");
}
for()
の中身について
int i = 0; | 初期化という作業で、変数 i は 0 からスタートするよ!と宣言している。 |
---|---|
i < 5; | 条件式で、変数 i が 5 未満になるまでループ処理を続けるよ!と宣言している。 |
i++ | 変数 i は、ループ 1 回につき 1 ずつ増えるよ!と宣言している。i++ は、 i = i + 1 と同じ意味。 2 ずつ増やしたいなら、 i = i + 2 と書くし、減らしたいなら、 i-- と書くことができる。 |
省略形
初期化部分であるカウンタ変数の省略
int i = 0;
for(; i < 5; i++) {
System.out.println(i+"回目");
}
PHP だと、ループの外で宣言した変数を使う場合、 for(i; i < 5; i++)
と書くことができるが、 Java だと PHP のように書くとエラーになるので省略形を使う。
for(int i = 0; i < 5; ) {
System.out.println(i+"回目");
i++;
}
増減を省略する場合は、ループ内にカウンタを増やす、減らすの処理を書く必要がある。
条件式の省略
int i = 0;
for(;;) {
System.out.println(i+"回目");
i++;
if (i == 5) {
break;
}
}
条件式を省略すると無限ループになるので、 break
とかで処理を終わらせる記述が必要。
拡張for 文の使い方
配列やコレクションに対して(イテレータを使っているため)、ループ処理をさせるときの構文。
// 配列
int list[] = {10, 20, 30};
for (int n : list){
System.out.println(n);
}
これは、基本形の以下と同じ
int list[] = {10, 20, 30};
for (int i = 0; i < list.length; i++) {
int n = list[i];
System.out.println(n);
}
forEach メソッドの使い方
拡張for 文と同様にイテレータを使うため、コレクションに対してループ処理させる構文。
ラムダ式を使って、拡張for 文よりさらに短いコードで記述することができる。
ArrayList を使う
// ArrayList
List strList = new ArrayList<>();
strList.add("アイウエオ");
strList.add("カキクケコ");
strList.add("サシスセソ");
strList.forEach(s -> System.out.println(s));
配列 を使う
// 配列
int list[] = {10, 11, 12, 13, 14};
Arrays.stream(list).forEach(n -> System.out.println(n));
// または
Integer list1[] = {10, 11, 12, 13, 14};
Arrays.asList(list1).forEach(n -> System.out.println(n));
forEach
はそのままでは配列に使うことができないので、 List
に変換するか、 StreamAPI の Arrays.stream()
メソッドを使う。ただし、
ArrayList
はプリミティブ型( int
や char
型)が使えず、 asList()
メソッドも同様にラッパークラスでないと使えない。Map を使う
// Map
Map map = new HashMap<>();
map.put(1 , "アイウエオ");
map.put(2 , "カキクケコ");
map.put(3 , "サシスセソ");
map.forEach((key, val) -> System.out.println(key + " は " + val));
// または
map.forEach((key, val) -> {
// 処理を記述
});