ラムダ式とは
関数型インターフェース(抽象メソッドを1つ持つインターフェース)の実装に使うことが出来る構文。
->
はアロー演算子と呼ぶらしい。かっこいい。
型推論と呼ばれる機能により、型を省略して記述することができる。
ラムダ式の構文
(引数) ->
{処理}
これだけ。
ただし、引数の書き方と処理の書き方は複数ある。以下参照。
引数のバリエーション
ラムダ式の引数の書き方は以下の4通りある。
式 | 解説 |
---|---|
() -> {実装} | 引数が0個のときの書き方 |
(String str) -> {実装} | 型と変数名を両方明示的にする書き方 |
(str) -> {実装} | 引数が1個のみの場合、型を省略できる。 |
str -> {実装} | 引数が1個のみでかつ、変数名のみの場合は、カッコを省略できる。 |
処理のバリエーション
ラムダ式の処理の記述方法は中カッコ{}
の有無で大きく以下の2通りある。
処理 | 説明 |
---|---|
() -> {処理1;return 処理2;}; | 中カッコ{} がある場合は、処理を複数記述することができる。rerurnキーワードは明示しなければならない。 |
() -> 処理1; | 中カッコ{} がない場合は、処理は1つしか記述することができない。さらにrerurnキーワードを省略しなければならない。 |
Java8で追加された主要な関数型インターフェース
インターフェース名 | メソッド名 | 説明 |
---|---|---|
Function<T, R> | R apply(T t) | T型の引数を受け取ってR型の結果を戻す「処理」の意。 |
Consumer< T > | void accept(T t) | T型の引数を受け取って処理するだけ。 結果を戻さない「消費者」の意。 |
Supplier | T get() | 何も引数に取らずに結果を戻す「供給者」の意。 |
Predicate< T > | boolean test(T t) | 受け取った引数を評価する「断定」の意。 |
関数型インターフェースの実装例
Function< T, R > の書き方
例1)Integer型の引数を受け取ってInteger型の値を返す。
Java
Function<Integer,Integer> func = (Integer x) -> {
return x + 100;
};
System.out.println(func.apply(100));//200
例2)Integer型の引数を受け取ってString型の値を返す。
Java
Function<Integer,String> func2 = (Integer x) -> {
return Integer.toString(x + 200);
};
System.out.println(func2.apply(100));//300
Consumer< T > の書き方
例1)String型の引数を受け取って消費する。
Java
Consumer<String> con = (String str) -> System.out.println(str);
con.accept("Nyaa!");//Nyaa!
Supplier の書き方
例1)引数を取らずにDATE型の値を返す。
Java
Supplier<Date> sup = () -> {
Date date = new Date();
return date;
};
System.out.println(sup.get());//「Mon Jul 02 01:04:38 JST 2018」
例2)固定値を返す。
Java
static String STR = "piyopiyo";
Supplier<String> str = () ->{
return STR;
};
System.out.println(str.get());//piyopiyo
Predicate< T > の書き方
例1)整数の比較結果を返す。
Java
Integer num = new Integer(100);
Predicate<Integer> pre = (Integer i) -> i == 100;
System.out.println(pre.test(num));//true
以上で記事の解説はお終い!
もっとJavaやSpringを勉強したい方にはUdemyがオススメ!同僚に差をつけよう!