Java8で導入されたラムダ式について、書き方のバリエーションを調べました。
迷った時に簡単に参照出来るよう、表形式で網羅しておくことにします。
ラムダ式のバリエーション
No. | 記述法 | 説明 |
---|---|---|
1 | () -> System.out.println("foo") | 引数なし |
2 | (n) -> System.out.println(n) | 引数あり(括弧で囲う) |
3 | (int n) -> System.out.println(n) | 引数あり(括弧で囲う+型明記) |
4 | n -> System.out.println(n) | 引数あり(括弧で囲わない) ※引数が一つの場合のみ括弧の省略可能 |
5 | (m, n) -> m+n | 引数あり(複数個) |
6 | (int m, int n) -> m+n | 引数あり(複数個+型明記) |
7 | (n) -> { return n * 2;} | ステートメント型のラムダ式 |
サンプルコード
上記のサンプルコードです。
// No.1 引数なし
Runnable lambda1 = () -> System.out.println("foo");
// No.2 引数あり(括弧で囲う)
IntConsumer lambda2 = (n) -> System.out.println(n);
// No.3 引数あり(括弧で囲う+型明記)
IntConsumer lambda3 = (int n) -> System.out.println(n);
// No.4 引数あり(括弧で囲わない) ※引数が一つの場合のみ括弧の省略可能
IntConsumer lambda4 = n -> System.out.println(n);
// No.5 引数あり(複数個)
IntBinaryOperator lambda5 = (m, n) -> m+n;
// No.6 引数あり(複数個+型明記)
IntBinaryOperator lambda6 = (int m, int n) -> m+n;
// No.7 ステートメント型のラムダ式
IntUnaryOperator lambda7 = (n) -> { return n * 2;};