ラムダ式と言って前に、最初の関数インタフェースを教えて
機能インタフェース
唯一、我々は、このインタフェースの機能としてインタフェースに注釈@Functionallnterface、強い制約を使用することができ、抽象メソッドのインターフェースを定義しています。Runnableを、呼び出し可能、コンパレータインターフェイスとして。
Javaインタフェースは、4つの組み込み関数:消費者<T>を、サプライヤー< T>、機能<T、R>、述語<T>。
ラムダ式は、これらの機能のインタフェースの発現を達成するために設計されています。
@FunctionalInterface パブリック インターフェイスのRunnable { パブリック 抽象 ボイドラン(); }
Runnbaleスレッドにたとえば、
Runnableを実行可能= 新しいRunnableを() { @Override 公共 のボイドの実行() { System.out.printlnは( "こんにちはラムダ!"); } }。 新しいスレッド(実行可能).start();
ラムダ式に変更することができます。
実行可能な実行可能=() - > { システム。アウト .println(" ハローラムダ!" ); }。 新しいスレッド(実行可能).start();
前記パラメータのリスト:インタフェースの要件に合致メソッドのパラメータリスト。
ラムダ機能の概要
- パラメータ型リストが無視され、直接書き込むことはできません。(注パラメータタイプこと、パラメータが理由ではないコンテキストデータ型推論ためJVMコンパイラ)
- 唯一つのパラメータ場合は、括弧を省略することができ
- 唯一のメソッド本体文がある場合は、中括弧をオフに省略することができます
- そこに一つだけの文であり、彼はreturn文であれば、あなたが直接、省略することができますreturnキーワード
例
構文:パラメータなし戻り値なしタイプ
公共 のボイドテスト(){ RunnableをRunnableを = 新しい新しいRunnableを(){ @Override 公共 無効RUN(){ システム。OUTの .println("ラムダこんにちは!" ); } }; ; Runnable.run() } / * * (* ) - >のSystem.out.println(「ラムダこんにちは!」); * / 公共 ボイドテスト(){ // 「 - >」はパラメータがないことを示す、わずかな括弧を左、右は、匿名性を達成するために(同等のラムダ体であります内部クラスのメソッドは、利用可能なインタフェースの、すなわち、カテゴリ)内部 のRunnable Runnableを=() - 。>システムOUTの .println(「ラムダこんにちは!」); runnable.run(); }
構文II:パラメータと戻り値の型なし
/ * * *(X) - >のSystem.out.println(X) * / 公共 ボイド試験(){ // メソッドパラメータe表し実装するインターフェース 消費者の<string>消費者=(E ) - > システム。OUT .println(" こんにちは" + E); consumer.accept(" ラムダ" ); } / * * * X -のSystem.out.println(X)>
*パラメータが"()"を省略できる場合 * / 公共 ボイド試験(){ // メソッドパラメータe表し実装するインターフェース 消費者の<string>コンシューマ= E->システム。OUT .println("こんにちは" + E)。 consumer.accept(" Lamdba " ); }
シンタックス3:2つの以上のパラメータや戻り値、および身体複数の文ラムダ
公共 のボイドTEST4(){ // ラムダ本体、使用する文の複数のブレース コンパレータ<整数> COM =(X、Y) - > { システム。OUTの .println(" 機能インタフェース" ); リターンInteger.compare(X、Y); }; int型の比較= com.compare(100、244 ) 。システムOUTの.println(比較); }