Java 8 - ラムダ式
ラムダ式は Java 8 で導入され、Java 8 の最大の機能であると宣伝されています。ラムダ式は関数型プログラミングを容易にし、開発を大幅に簡素化します。
構文
ラムダ式は、次の構文によって特徴付けられます。
parameter -> expression body
以下は、ラムダ式の重要な特徴です。
- <リ>
オプションの型宣言 − パラメータの型を宣言する必要はありません。コンパイラは、パラメーターの値から同じものを推測できます。
<リ>パラメーターを囲むオプションの括弧 − 括弧内に 1 つのパラメーターを宣言する必要はありません。複数のパラメータの場合、括弧が必要です。
<リ>オプションの中括弧 − 本体に 1 つのステートメントが含まれる場合、式本体で中かっこを使用する必要はありません。
<リ>オプションのリターン キーワード − 本体に値を返す単一の式がある場合、コンパイラは自動的に値を返します。式が値を返すことを示すには、中かっこが必要です。
ラムダ式の例
たとえば、C:\> JAVA.
などで任意のエディターを使用して、次の Java プログラムを作成します。Java8Tester.java
ライブデモpublic class Java8Tester { public static void main(String args[]) { Java8Tester tester = new Java8Tester(); //with type declaration MathOperation addition = (int a, int b) -> a + b; //with out type declaration MathOperation subtraction = (a, b) -> a - b; //with return statement along with curly braces MathOperation multiplication = (int a, int b) -> { return a * b; }; //without return statement and without curly braces 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)); //without parenthesis GreetingService greetService1 = message -> System.out.println("Hello " + message); //with parenthesis GreetingService greetService2 = (message) -> System.out.println("Hello " + message); greetService1.sayMessage("Mahesh"); greetService2.sayMessage("Suresh"); } 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 を使用してクラスをコンパイルします 次のようにコンパイラ-
C:\JAVA>javac Java8Tester.java
次のように Java8Tester を実行します −
C:\JAVA>java Java8Tester
次の出力が生成されるはずです −
10 + 5 = 15 10 - 5 = 5 10 x 5 = 50 10 / 5 = 2 Hello Mahesh Hello Suresh
以下は、上記の例で考慮すべき重要な点です。
- <リ>
ラムダ式は、主に機能インターフェースのインライン実装、つまり単一のメソッドのみを持つインターフェースを定義するために使用されます。上記の例では、さまざまなタイプのラムダ式を使用して、MathOperation インターフェイスの操作メソッドを定義しました。次に、GreetingService の sayMessage の実装を定義しました。
<リ>ラムダ式は、匿名クラスの必要性を排除し、Java に非常にシンプルかつ強力な関数型プログラミング機能を提供します。
範囲
ラムダ式を使用すると、任意の最終変数または実質的に最終変数 (一度だけ割り当てられる) を参照できます。 2 回目に変数に値が割り当てられると、ラムダ式はコンパイル エラーをスローします。
範囲の例
たとえば、C:\> JAVA.
などで任意のエディターを使用して、次の 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("Mahesh"); } interface GreetingService { void sayMessage(String message); } }
結果を確認する
javac を使用してクラスをコンパイルします 次のようにコンパイラ-
C:\JAVA>javac Java8Tester.java
次のように Java8Tester を実行します −
C:\JAVA>java Java8Tester
次の出力が生成されるはずです −
Hello! Mahesh
Java