Java
ラムダ式
java8

【Java】ラムダ式の省略方法まとめ

ラムダ式の省略方法をまとめます。
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 メソッドの{}の省略とセット