Javaのラムダ式のサンプルです。
目次
ラムダ式
| インターフェース名 変数 = ( 引数 ) -> { メソッドの処理内容を記述 } |
- 矢印(->)の左側に引数を指定します。
- 矢印(->)の右側に引数を受け取って行うメソッドの処理内容を記述します。
- ラムダ式は、関数型インタフェースのメソッドの内容を記述します。
- 関数型インターフェースとは実装するメソッドがひとつだけのインターフェースです。
- 関数型インターフェースであるかは@FunctionalInterfaceアノテーションで確認できます。
- 匿名クラスをラムダ式に変更することができます。
- Java8で導入されました。
- 以下は、Oracleのラムダ式のリンクです。
https://www.oracle.com/technetwork/jp/articles/java/architect-lambdas-part1-2080972-ja.html
匿名クラスとラムダ式のサンプル
匿名クラスからラムダ式に変更することができます。
2つの対応箇所を比較するとわかりやすいので、以下、最初に匿名クラス、次にラムダ式のサンプルです。
匿名クラス
匿名クラスのサンプルです。
package test1;
@FunctionalInterface
interface Color1 {
String write1(String a);
}
public class Test1 {
public static void main(String[] args) {
Color1 c1 = new Color1() {
@Override
public String write1(String a) {
return a + "です";
}
};
String b = c1.write1("青");
System.out.println(b); //青です
}
}
4-6行目は、独自に作成した関数型インターフェースです。
3行目の@FunctionalInterfaceは関数型インターフェースであるか確認しています。
10-16行目は、匿名クラスです。
10行目のColor1は4行目のインターフェースを指していて実装しています。
12-14行目は、5行目のメソッドの内容を記述しています。
18行目で処理を実行しています。
ラムダ式
上記の匿名クラスをラムダ式に変更したサンプルです。
package test1;
@FunctionalInterface
interface Color1 {
String write1(String a);
}
public class Test1 {
public static void main(String[] args) {
Color1 c1 = (String a) -> {return a + "です";};
String b = c1.write1("青");
System.out.println(b); //青です
}
}
4-6行目は、独自に作成した関数型インターフェースです。
3行目の@FunctionalInterfaceは関数型インターフェースであるか確認しています。
10行目がラムダ式です。関数型インタフェースの5行目のメソッドの内容を記述しています。
矢印の左側の(String a)が引数で、矢印の右側が引数を受け取って行う処理です。
12,13行目は、匿名クラスのコードの17,18行目と同じ結果になります。
ラムダ式の記述の省略
上記の10行目は、引数の型であるStringを省略できます。
Color1 c1 = (a) -> {return a + "です";};
さらに引数がひとつの場合、引数を囲む( )を省略できます。引数が2つ以上のときは()が必要です。
また矢印の右側のreturnと { };を省略できます。
Color1 c1 = a -> a + "です";
関連の記事
Java ラムダ式で関数型インターフェースを使用するサンプル
Java 匿名クラスのサンプル
Java 標準アノテーションのサンプル