リスト(List)やマップ(Map)を順番にアクセスする処理をする場合に、forEachメソッドを使うと便利です。通常のfor文、拡張for文よりも書き方が簡単になりますので、ぜひ使ってみてください。
UT試験やデバッグする時に、ListやMapの中身を全部出したい時などに便利ですよ。
for文を使った場合(3行)
// 出力用リストの準備
List<Integer> array = new ArrayList<Integer>();
array.add(1);
array.add(2);
array.add(3);
// for文
for(int i = 0;i < 3;i++) {
System.out.println(array.get(i));
}
通常のfor文です。よく最初に本に載っているやつです。
for文を理解するには、とてもわかりやすいです。
iを2つずつ進めることが出来るなど、ループを柔軟に作成出来ます。
拡張for文を使った場合(3行)
// 拡張for文の構文
for(要素の型 任意の変数名 : 配列名、コレクション名){
// 繰り返し処理
}
// 拡張for文
for(Integer i:array) {
System.out.println(i);
}
拡張for文になると、通常のfor文と記述する行数は変わりませんが、カウントアップ用の変数をインクリメントする必要が無くなります。
forEachメソッドを使った場合(1行)
// forEachメソッドの構文
コレクション名.forEach(引数 -> 繰り返し処理);
// forEachメソッド
array.forEach(i -> System.out.println(i));
forEachメソッドにすると、なんと1行で記述出来ます。
最初は、「->」の記載が不思議に見えますが慣れるとそうでも無くなります。
Mapで拡張for文を使う方法
// Map.Entryというinterfaceが定義されてて、そのSetが返ってくる
for(Map.Entry<String, String> e : map.entrySet()) {
System.out.println(e.getKey() + " : " + e.getValue());
}
Mapでforeachメソッドを使う方法
// Lambdaを使う場合
Map.forEach((k, v) -> {
System.out.println("key: " + k + ", value: " + v);
});
// entrySetを使う場合
Map.entrySet().forEach(entry -> {
System.out.println("key: " + entry.getKey()+ ", value: " + entry.getValue());
});