LoginSignup
0
0

Javaラムダ式

Posted at

Javaのラムダ式

関数型インターフェイスを実装したクラスのインスタンスを、簡単に作るための文法です。
言い換えれば、クラスの宣言とインスタンスの生成を同時に行う文法。

Javaのラムダ式で関連するのは、関数型インターフェース、またこの関数型インターフェースは抽象メソッドを一つだけもつ。

1つだけというところがポイント。

通常のクラスからラムダ式になるまで

こちらを参考に学んでみました。

第1段階(内部クラス)

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        
        class ComparatorImpl implements Comparator<String> {
            public int compare(String s1, String s2) {
                return s1.compareTo(s2);
            }
        }
        
        Comparator<String> c = new ComparatorImpl();
        System.out.println(c.compare("ABC", "DEF"));
    }

    
}

第2段階(匿名クラス)

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {

/*        
        class ComparatorImpl implements Comparator<String> {
            public int compare(String s1, String s2) {
                return s1.compareTo(s2);
            }
        }
*/        
        Comparator<String> c = new Comparator<String>() {
            public int compare(String s1, String s2) {
                return s1.compareTo(s2);
            }
        };
        System.out.println(c.compare("ABC", "DEF"));
    }

    
}
Comparator<String> c = new ComparatorImpl();

の右辺が new Comparator()になり、さらに{}内に式を書きます。

ラムダ式完成形

  1. 右辺のComparator()を削除します。
  2. 抽象メソッドcompareメソッドのpublic intを削除します。
  3. 抽象メソッドcompareも削除します。
  4. 抽象メソッドの引数の型Stringを削除します。
  5. 抽象メソッドのreturnを削除します。
  6. new Comparator()も削除します。
  7. {と}を削除し、抽象メソッドの引数から処理部分は->でつなぎます。
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        Comparator<String> c = (s1, s2) -> s1.compareTo(s2);
        System.out.println(c.compare("ABC", "DEF"));
    }
}

だいぶ簡単になりましたね。
抽象メソッドが1つということで引数や戻り値の型をかかず、省略できました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0