ラムダ式の省略方法をまとめます。
Java Silverなどの試験で問われるので、受験者の助けになればと思います。
最後に覚え方をまとめています。
そもそもラムダ式がわからない場合はこちらをどうぞ。
Java8のラムダ式を理解する
まず、ラムダ式の基本形。
Predicate<String> javaChecker = (String s) -> { return s.equals("Java"); };
ここから何をどう省略できるのか見て行きましょう。
引数の型
まず、引数の型が省略可能です。
Predicate<String> javaChecker = (s) -> { return s.equals("Java"); };
ただし、複数の引数がある場合、片方だけ省略するというのはできません。
// コンパイルエラー
BiFunction<Integer, Integer, Integer> adder = (a, Integer b) -> { return a + b; };
引数の()
引数の()も省略可能です。
Predicate<String> javaChecker = s -> { return s.equals("Java"); };
ただし、条件が2つあります。
まず、型を指定した場合は省略できません。
// コンパイルエラー
Predicate<String> javaChecker = String s -> { return s.equals("Java"); };
次に、引数が複数ある場合も省略できません。
// コンパイルエラー
BiFunction<Integer, Integer, Integer> adder = a, b -> { return a + b; };
引数が1単語の時のみ()が省略可と覚えると良いと思います。
メソッドの{}
メソッドの{}も省略可能です。
Consumer<String> buyer = goods -> System.out.println(goods + "を購入しました");
こちらも条件があります。
まず、処理が2文以上あると省略できません。
// コンパイルエラー
Consumer<String> buyer = goods -> String message = "私が、" + goods;
System.out.println(message + "を購入しました");
次にreturnを記述すると省略できません。
// コンパイルエラー
Predicate<String> javaChecker = s -> return s.equals("Java");
ただし、returnも省略すれば正常に実行することができます。
Predicate<String> javaChecker = s -> s.equals("Java");
処理が1ステートメントの時のみ{}が省略可、戻り値がある場合はreturnの省略もセットで、と覚えましょう。
return
上記のようにreturnは省略可能ですが、メソッドの{}を残したままでは省略できません。
// コンパイルエラー
Predicate<String> javaChecker = s ->{ s.equals("Java"); };
returnを省略したい時も{}の省略とセットということになります。
まとめ
まとめると以下のようになります。
省略部分 | 条件 |
---|---|
引数の型 | 全引数の型を省略すること |
引数の() | 1単語の時のみ |
メソッドの{} | 1ステートメントの時のみ 戻り値がある場合、returnの省略とセット |
return | メソッドの{}の省略とセット |