Java 8関数式プログラミングの方法リファレンス

1804 ワード

本文の参考:《30分入門Java 8の方法の引用》の方法の引用、一般的に4種類の形式があります:
リファレンス構築方法
ClassName::new

Lamda式と等価
()->new ClassName()

関数インタフェース
interface F{
    ClassName contructMethod();
}

静的メソッドの参照
ClassName::staticMethod

Lamda式と同等:
(a1,a2,...,an)->ClassName.staticMethod(a1,a2,...,an);

関数インタフェース
interface F{
    ReturnType method(a1,a2,....,an);
}

参照オブジェクトのインスタンスメソッド
obj::method

Lamda式と同等:
(a1,a2,....,an)->obj.method(a1,a2,...,an)

関数インタフェース
interface F{
    ReturnType method(a1,a2,....,an);
}

参照タイプオブジェクトのインスタンスメソッド(※)
ClassType::method

Lamda式と同等:
(obj,a1,a2,....,an)->obj.method(a1,a2,...,an)

ここでobjはClassTypeタイプのオブジェクトである.関数インタフェース
interface F{
    ReturnType method(a1,a2,....,an);
}

例えば、int値を1つ保存し、2つの減数を減らす方法subtractがある.
class Int{
      int value;
      public Int(int value) {
          this.value = value;
      }
      int subtract(Int other1,Int other2){
          return value-other1.value-other2.value;
      }
}

もう1つのFuncインタフェースは、3つのIntパラメータを受け入れ、int値を返します.
interface Func{
    int action(Int a,Int b,Int c);
}

Testでは方法がありますw
public static void show(Int a,Int b,Int c,Func func){
    System.out.print(func.action(a,b,c));
}

では、showは以下のように使用できます.
Int intA=new Int(1),intB=new Int(2),intC=new Int(3);
show(intA,intB,intC,/*Lamda   */(Int a,Int b,Int c)->a.subtract(b,c));
show(intA,intB,intC,/*           */Int::subtract);