JAva 8,Lambda式および関数式インタフェースの使用
2903 ワード
前言:最近技術の博文を見て、if..elseが多すぎる情況について、以前の解決策は一般的に策略のモードを使うので、しかしこの博文は新しい構想をあげて、Java 8 Lambdaの表現式を利用してMapと関数式のインタフェースをプラスして優美な解決の構想を実現します.では、問題が来ました.Lambda式とは何ですか.関数インタフェースとは?
一、Lambda式とは何ですか.
まずいくつかの例を見てみましょう.
式を->、->左、->右の3つの部分に分けることができます.->左がメソッドが受け入れるパラメータであり,->右がメソッドの具体的な実装であることは容易に分かる.x->2*xで 例として、この方法を以前の書き方で表すと、
以上の例では、Lambda式の次の重要な特性を見ることができます.オプションタイプ宣言:パラメータタイプを宣言する必要はありません.コンパイラはパラメータ値を統一的に識別できます. オプションのパラメータカッコ:1つのパラメータはカッコを定義する必要はありませんが、複数のパラメータはカッコを定義する必要があります. オプションのかっこ:マスターに文が含まれている場合は、カッコを使用する必要はありません. オプションの戻りキー:マスターが式の戻り値が1つしかない場合、コンパイラは自動的に値を返し、カッコは明示的な式が数値を返すことを指定する必要があります.
はい、Lambda式は見ますが、具体的にはどうやって使いますか?
答えはjavaが私たちに多くの基礎関数式インタフェースを提供していることです.例えば、次の例です.
Lambda式で構成された関数は関数式インタフェースを返し,Lambda式で構成された関数はこのインタフェースの実現である.次の関数インタフェースの内容を確認できます.
二、関数式インタフェースとは何ですか.
1.関数式インタフェースと呼ばれる抽象的なメソッドのみを含むインタフェース.2.Lambda式でインタフェースのオブジェクトを作成できます.(Lambda式が検出された例外を放出する場合、この例外はターゲットインタフェースの抽象メソッドで宣言する必要があります).3、任意の関数インタフェースで@FunctionalInterface注釈を使用できます.これにより、関数インタフェースであるかどうかを確認できます.javadocには、このインタフェースが関数インタフェースであることを示す宣言が含まれます.4、java.util.functionパッケージの下でjava 8を定義した豊富な関数式インタフェース
したがって、関数インタフェースをカスタマイズするには、 @FunctionalInterface注釈は、関数式インタフェースの仕様を満たすだけでよく、インタフェースでも抽象クラスでもよい.
参考文献:
Java 8の新しい機能の関数インタフェース-https://blog.csdn.net/qinchao_mei/article/details/97649152
Java 8 Lambdaエクスプレッション|菜鳥チュートリアル-https://www.runoob.com/java/java8-lambda-expressions.html
一、Lambda式とは何ですか.
まずいくつかの例を見てみましょう.
// 1. , 5
() -> 5
// 2. ( ), 2
x -> 2 * x
// 3. 2 ( ),
(x, y) -> x – y
// 4. 2 int ,
(int x, int y) -> x + y
// 5. string , , ( void)
(String s) -> System.out.print(s)
式を->、->左、->右の3つの部分に分けることができます.->左がメソッドが受け入れるパラメータであり,->右がメソッドの具体的な実装であることは容易に分かる.x->2*xで 例として、この方法を以前の書き方で表すと、
private X method(X x){
return 2*x
}
以上の例では、Lambda式の次の重要な特性を見ることができます.
はい、Lambda式は見ますが、具体的にはどうやって使いますか?
答えはjavaが私たちに多くの基礎関数式インタフェースを提供していることです.例えば、次の例です.
public static void main(String[] args) {
IntBinaryOperator intBinaryOperator = (x,y) -> x - y;
System.out.println(intBinaryOperator.applyAsInt(2, 1)); // 1
Function function = (x) -> String.format("hello %s !", x);
System.out.println(function.apply("world")); // hello world!
}
Lambda式で構成された関数は関数式インタフェースを返し,Lambda式で構成された関数はこのインタフェースの実現である.次の関数インタフェースの内容を確認できます.
@FunctionalInterface
public interface IntBinaryOperator {
/**
* Applies this operator to the given operands.
*
* @param left the first operand
* @param right the second operand
* @return the operator result
*/
int applyAsInt(int left, int right);
}
二、関数式インタフェースとは何ですか.
1.関数式インタフェースと呼ばれる抽象的なメソッドのみを含むインタフェース.2.Lambda式でインタフェースのオブジェクトを作成できます.(Lambda式が検出された例外を放出する場合、この例外はターゲットインタフェースの抽象メソッドで宣言する必要があります).3、任意の関数インタフェースで@FunctionalInterface注釈を使用できます.これにより、関数インタフェースであるかどうかを確認できます.javadocには、このインタフェースが関数インタフェースであることを示す宣言が含まれます.4、java.util.functionパッケージの下でjava 8を定義した豊富な関数式インタフェース
したがって、関数インタフェースをカスタマイズするには、 @FunctionalInterface注釈は、関数式インタフェースの仕様を満たすだけでよく、インタフェースでも抽象クラスでもよい.
@FunctionalInterface
public interface MyFunctionalInterface {
String method(String str);
public static void main(String[] args) {
MyFunctionalInterface function = (x) -> String.format("hello %s !", x);
System.out.println(function.method("world")); // hello world!
}
}
参考文献:
Java 8の新しい機能の関数インタフェース-https://blog.csdn.net/qinchao_mei/article/details/97649152
Java 8 Lambdaエクスプレッション|菜鳥チュートリアル-https://www.runoob.com/java/java8-lambda-expressions.html