ラムダ式という記法ですが、これを理解するためには、まず匿名クラスについて理解しなければいけません。
###通常のクラス
あるクラスを継承、またはあるインタフェースを実装したクラスを作成する場合、
普通は新たにclass宣言し、クラスを作成します。
ここでは例としてRunnableを実装したMyRunnableというクラスを作成します。Runnableは抽象メソッドrunを持っているので、抽象クラスとして宣言しないためにはrunメソッドを実装する必要がありますので、"test"と出力するように実装しましょう。
java
1class MyRunnable implements Runnable {
2 @Override
3 public void run() {
4 System.out.println("test");
5 }
6}
こうして、このクラスを使用する場合、
java
1Runnable r = new MyRunnable();
のようにして使うことができます。
###匿名クラス
しかし、このクラスをこの1か所でしか使用しないならば、この1か所のためだけにクラスを宣言するのが面倒です。そこで、その場所だけで使うクラスをその場で作成し、インスタンスを作成しようというのが次の匿名クラスという仕組みです。
java
1Runnable r = new Runnable(){
2 @Override
3 public void run() {
4 System.out.println("test");
5 }
6};
やっていることは上記MyRunnableを使用しているものとほとんど変わりありません。異なるのはMyRunnableというクラス名を使用していないという点です。クラス名をつけずにクラスを作成しているため、匿名クラスと呼ばれています。
###ラムダ式
この匿名クラスを、特定条件下でもっと簡略化して書くことができる仕組みがラムダ式です。特定条件とは、
0. 関数型インタフェースを実装したものである
0. 実装したインタフェースの唯一の抽象メソッドをオーバーライドする以外、何も記述しない
(フィールドの宣言などもNG)
これらになります。関数型インタフェースとは、抽象メソッドを1つだけ持つインタフェースです。Java8になってインタフェースがdefault実装やstaticメソッドを持つことができるようになりましたが、それらは抽象メソッドにカウントしません。
ラムダ式は、関数型インタフェースが持つ唯一のメソッドをオーバーライドする中身を記述します。オーバーライドする対象のメソッドが1つしかないため、メソッド名も引数型も返り値型も確定しているので、それらを省略した書き方ができます。上記の例をラムダ式で書くと次のようになります。
java
1Runnable r = () -> System.out.println("test");
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。