Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

[初心者向け]Java8ラムダの基本をサクッと理解する

More than 3 years have passed since last update.

この記事は?

世間ではすでにJava9がリリースされていますが、Java8で追加されたラムダ式をもう一度おさらいしたい人のための記事です。自分用まとめも兼ねてます。
間違いなどあったら指摘していただけるとありがたいです!

ラムダ、ラムダ式とは?

Java8で変更された大きな点がラムダ式です。
もともと数学では「関数を変数のように扱って演算する」と言う考え方があり、その変数としてよくλ(ラムダ)と言う名称が使われているとのこと。
この数学的な考え方をJavaでも取り入れたのがJavaのラムダ式で、意味合いとしては「値として扱える関数の表現」といったものというのがわかりやすいと思います。

例えば以下のようなコードを指します。
(p) -> (p.getAge()) < 30)

これは関数にpを入れるとpの年齢が30未満かが返ってくることを表す式です。

ラムダ式を書いてみよう

サンプルとなるラムダ式を書いて、そのコードを分解してくことでラムダ式を理解していきましょう。

LambdaSample.java
public class LambdaSample {
    public static void main(String[] args) {
        Runnable r = () -> System.out.println("Hello Lambda!");
        r.run();
    }
}

上の例を実行してみると以下のような結果が出力されます。
Hello Lambda!

ラムダ式で書かれたコードは以下です。
() -> System.out.println("Hello Lambda!")

ラムダ式をJDK8以前の書き方で書いてみると・・・

このLambdaSample.javaをJDK8以前の書き方をすると以下のようになります。

RunnableSample.java
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では以下の部分をラムダ式に置き換えています。

JDK8以前
new Runnable() {
           @Override
           public void run() {
               System.out.println("Before Lambda!");
           }
       }
JDK8
() -> System.out.println("Hello Lambda!")

コード量がだいぶ減りましたね。

このJDK8以前で書かれているコードは「無名クラス(匿名クラス)」とも言います。
つまりラムダ式とは「インターフェースを実装した無名クラスのオブジェクトを書き換えたもの」と言えます。

参考図書・サイト

http://java-code.jp/106
https://qiita.com/sanotyan1202/items/64593e8e981e8d6439d3
Java8ではじめる「ラムダ式」
Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away