1.基本的な文法
Java8では新しい演算子「->」矢印演算子が導入されました。矢印演算子はLambda式を2つの部分に分割します
左側:抽象メソッドのパラメーターリストに対応するLambda式のパラメーターリスト
右:抽象メソッドで実装される機能に対応する、実行される機能
2.ヒント
左と右の間にブラケットを保存し、左側にタイプを推測し、
3.文法フォーマット
構文形式1:パラメータなし、戻り値なし
()-> System.out.println( "Hello");
@Test public void test1(){ int num = 2; // jdk 1.7より前は、同じレベルで呼び出すことができるようになる前に、それがfinalでなければならない Runnable r = new Runnable(){ @Override public void run(){ System.out.println( "Hello" + num); } }; r.run(); System.out.println( "---------------------" ); // 使用ラムダ式 Runnable r2 =()-> System.out.println( "Hello Lambda" ); r2.run(); }
構文形式2:パラメータが1つあり、戻り値はありません
@Test public void test2(){ Consumer <String> con = (x)-> System.out.println(x); con.accept( "パラメータがあります" ); }
構文形式3:パラメーターが1つしかない場合は、括弧なしで記述せずに省略できます。
@Test public void test2(){ Consumer <String> con = x-> System.out.println(x); con.accept( "パラメータがあります" ); }
構文フォーマット4:2つのパラメーターがあり、戻り値があり、Lambda本体に複数のステートメントがあります
@Test public void test4(){ コンパレータ <Integer> com = (x、y)-> { System.out.println( "Functional Interface"); return Integer.compare(x、y); }; }
構文フォーマット5:2つのパラメーターがあり、戻り値があり、Lambda本体にはステートメントが1つしかなく、returnも{}も記述できません
@Test public void test5(){ コンパレータ <Integer> com = (x、y)-> Integer.compare(x、y); }
構文形式6: Lambda式のパラメーターリストのデータ型は省略または書き込むことができます。
JVMコンパイラーはコンテキスト、データ型、つまり「型推論」から推論するため
(整数x、整数y)-> Intrger.compare(x、y);
4.ラムダ式には「関数型インターフェース」のサポートが必要
機能インターフェース:インターフェースには、@ FunctionalInterfaceで装飾できる抽象メソッドインターフェースが1つだけあります。機能インターフェースかどうかを確認できます
//インターフェース、唯一つのパラメータ、インターフェース戻り値
パッケージ時計; @FunctionalInterface パブリック インターフェイスMYFUN { パブリック整数のgetValue(整数X); }
// 要件:数値に対して操作を実行する @Test public void test7(){ Integer num = operation(100、x-> x * x); System.out.println(num); System.out.println(operation( 200 、y-> y + 200 )); } public Integer operation(Integer num、MyFun my){ return my.getValue(num); }