リストやマップなどのコレクションに対しては拡張 for 文が使えますが、ここで学ぶ forEach 文とラムダ式と組み合わせるともっと簡潔に繰り返し処理を行うことが出来ます。
まず forEach 文の書式は次のようになります。
変数名.forEach( ラムダ式 )
ではリストを使った例を示します。
import java.util.ArrayList;
public class Main{
public static void main(String[] args) {
// リスト定義
var list1 = new ArrayList<String>();
var list2 = new ArrayList<Integer>();
// 要素を追加
list1.add( "hoge" );
list1.add( "fuga" );
list1.add( "piyo" );
list2.add( 12 );
list2.add( 34 );
list2.add( 56 );
// String 型リストの forEach 文
// 型推論により str は String 型になる
list1.forEach( str -> {
System.out.println( "str = "+str );
} );
// Integer 型リストの forEach 文
// 型推論により a は Integer 型になる
list2.forEach( a -> {
System.out.println( "a = "+a );
} );
}
}
str = hoge str = fuga str = piyo a = 12 a = 34 a = 56
同様にマップを使った場合は次のようになります。
マップの場合はキーと値の2つがラムダ式の引数となります。
import java.util.HashMap;
public class Main{
public static void main(String[] args) {
// マップ定義
var map = new HashMap<String, Integer>();
// 要素を追加
map.put( "hoge", 123 );
map.put( "fuga", 456 );
map.put( "piyo", 789 );
// key がキー、value が値
// 型推論により key は String 型、value は Integer 型になる
map.forEach( (key,value) -> {
System.out.println( "key = " + key + ", value = " + value );
} );
}
}
key = hoge, value = 123 key = fuga, value = 456 key = piyo, value = 789