関数型インターフェース

関数型インターフェース

ラムダ式やStream、メソッド参照をやっていくうえでよく出てくる関数型インターフェースのお勉強。
パッケージjava.util.function

関数型インタフェースは、ラムダ式やメソッド参照のターゲットとなる型を提供します。 各関数型インタフェースには、その関数型インタフェースの関数メソッドと呼ばれる単一の抽象メソッドが含まれており、ラムダ式のパラメータや戻り値の型のマッチングや適応は、そのメソッドに対して行われます。

ってことで、抽象メソッドが1個があるインターフェースが関数型インターフェースと呼ばれるものらしい。

抽象メソッドは、処理を書かずに継承先にオーバーライドを強制するメソッド

public interface HelloInterface{
    public abstract void Hello(String text);
}

public class Studay {
    public static void main(String[] args) {
        HelloInterface test = new HelloInterface() {
            @Override
            public void Hello(String text) {
                System.out.println("Hello" + text);
            };
        };
        test.Hello("Hello");
    }
}
// Hello Hello

Function

型パラメータ:
T - 関数の入力の型
R - 関数の結果の型

関数型インタフェースを使う時、わざわざ毎回クラスを作るのは面倒ですが、Javaにはモジュールが用意されています。
Functionは、変数を受け取って結果を返す処理を記述することができそうですね。

public class Studay {
    public static void main(String[] args) {
        Function<String,Integer> func = new Function<String, Integer>() {
            @Override
            public Integer apply(String s) {
                return s.length();
            };
        };
        System.out.println(func.apply("おはし"));
        // 3
    }
}

文字列を受け取って長さを返すだけ。
ただ、これを宣言の時に毎回書くのは中々…という所で、ラムダ式の出番が出てきますが、それはまた次回。もう眠い・・・。