Java8-lambda-expressions
提供:Dev Guides
Java 8-ラムダ式
ラムダ式はJava 8で導入され、Java 8の最大の機能であると宣伝されています。 ラムダ式は関数型プログラミングを容易にし、開発を大幅に簡素化します。
構文
ラムダ式は、次の構文によって特徴付けられます。
parameter -> expression body
以下は、ラムダ式の重要な特徴です。
- オプションの型宣言-パラメータの型を宣言する必要はありません。 コンパイラーは、パラメーターの値から同じことを推測できます。
- パラメータを囲むオプションの括弧-括弧で単一のパラメータを宣言する必要はありません。 複数のパラメーターの場合、括弧が必要です。
- オプションの中括弧-本体に単一のステートメントが含まれる場合、式の本体で中括弧を使用する必要はありません。
- オプションのreturnキーワード-値を返す単一の式が本体にある場合、コンパイラは自動的に値を返します。 式が値を返すことを示すには、中括弧が必要です。
ラムダ式の例
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回割り当てられた場合、Lambda式はコンパイルエラーをスローします。
スコープの例
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