Javaの8ラムダ式
ラムダ式は、Java 8のリリースの最も重要な新機能を促進することであるクロージャを呼び出すことができます。
ラムダは、メソッド(メソッドへのパラメータとして渡された関数)のパラメータとして機能させます。
ラムダ式は、コードの使用は、よりシンプルかつコンパクトになることができます。
文法
ラムダ式の構文は次のとおりです。
(parameters) -> expression 或 (parameters) ->{ statements; }
ラムダ式の重要な特徴は以下のとおりです。
- オプションの型宣言:パラメータ型を宣言する必要はありませんが、コンパイラは、識別パラメータ値を統一することができます。
- 括弧内のオプションのパラメータ:括弧なしで定義されたパラメータが、パラメータの数に括弧を定義する必要があります。
- オプションのブレース:ボディはあなたがブレースを必要としないステートメントが含まれている場合。
- オプションのリターンキーワードは:被験者が値を返すのみ1式の場合、コンパイラは自動的に値を返します、中括弧は値を返す明確な式を指定する必要があります。
ラムダは、実施例を表現します
Java8Tester.javaファイルで次のコードを入力します。
public class Java8Tester { public static void main(String args[]){ Java8Tester tester = new Java8Tester(); // 类型声明 MathOperation addition = (int a, int b) -> a + b; // 不用类型声明 MathOperation subtraction = (a, b) -> a - b; // 大括号中的返回语句 MathOperation multiplication = (int a, int b) -> { return a * b; }; // 没有大括号及返回语句 MathOperation division = (int a, int b) -> a / b; System.out.println("10 + 5 = " + tester.operate(10, 5, addition)); System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction)); System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication)); System.out.println("10 / 5 = " + tester.operate(10, 5, division)); // 不用括号 GreetingService greetService1 = message -> System.out.println("Hello " + message); // 用括号 GreetingService greetService2 = (message) -> System.out.println("Hello " + message); greetService1.sayMessage("w3big"); greetService2.sayMessage("Google"); } interface MathOperation { int operation(int a, int b); } interface GreetingService { void sayMessage(String message); } private int operate(int a, int b, MathOperation mathOperation){ return mathOperation.operation(a, b); } }
上記のスクリプトの実装、出力は次のようになります。
$ javac Java8Tester.java $ java Java8Tester 10 + 5 = 15 10 - 5 = 5 10 x 5 = 50 10 / 5 = 2 Hello w3big Hello Google
以下の点に注意することはラムダ式を使用します。
- ラムダ式は、主に、例えば、インタフェースするための簡単な方法を実行するためのメソッド定義ラインインタフェースで使用されています。 上記の例では、MathOperationインターフェースのメソッドを定義するラムダ式の様々なタイプを使用します。 その後、我々は実行sayMessageを定義します。
- ラムダ式匿名メソッドは、面倒なの使用を排除し、シンプルでありながら強力なプログラミング機能のJava関数を与えられました。
変数のスコープ
ラムダ式は、あなたがそうでなければ、内部コンパイルエラーを治外法権変数λの定義を変更することができないことを意味し、最終または最終ローカル変数を参照することができます。
Java8Tester.javaファイルで次のコードを入力します。
public class Java8Tester { final static String salutation = "Hello! "; public static void main(String args[]){ GreetingService greetService1 = message -> System.out.println(salutation + message); greetService1.sayMessage("w3big"); } interface GreetingService { void sayMessage(String message); } }
上記のスクリプトの実装、出力は次のようになります。
$ javac Java8Tester.java $ java Java8Tester Hello! w3big