この記事は?
世間ではすでにJava9がリリースされていますが、Java8で追加されたラムダ式をもう一度おさらいしたい人のための記事です。自分用まとめも兼ねてます。
間違いなどあったら指摘していただけるとありがたいです!
ラムダ、ラムダ式とは?
Java8で変更された大きな点がラムダ式です。
もともと数学では「関数を変数のように扱って演算する」と言う考え方があり、その変数としてよくλ(ラムダ)と言う名称が使われているとのこと。
この数学的な考え方をJavaでも取り入れたのがJavaのラムダ式で、意味合いとしては「値として扱える関数の表現」といったものというのがわかりやすいと思います。
例えば以下のようなコードを指します。
これは関数にpを入れるとpの年齢が30未満かが返ってくることを表す式です。
ラムダ式を書いてみよう
サンプルとなるラムダ式を書いて、そのコードを分解してくことでラムダ式を理解していきましょう。
public class LambdaSample {
public static void main(String[] args) {
Runnable r = () -> System.out.println("Hello Lambda!");
r.run();
}
}
上の例を実行してみると以下のような結果が出力されます。
Hello Lambda!
ラムダ式で書かれたコードは以下です。
ラムダ式をJDK8以前の書き方で書いてみると・・・
このLambdaSample.javaをJDK8以前の書き方をすると以下のようになります。
public class RunnableSample {
public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("Before Lambda!");
}
};
r.run();
}
}
LambdaSample.javaでは以下の部分をラムダ式に置き換えています。
new Runnable() {
@Override
public void run() {
System.out.println("Before Lambda!");
}
}
() -> System.out.println("Hello Lambda!")
コード量がだいぶ減りましたね。
このJDK8以前で書かれているコードは「無名クラス(匿名クラス)」とも言います。
つまりラムダ式とは「インターフェースを実装した無名クラスのオブジェクトを書き換えたもの」と言えます。
参考図書・サイト
http://java-code.jp/106
https://qiita.com/sanotyan1202/items/64593e8e981e8d6439d3
Java8ではじめる「ラムダ式」
Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング