この記事では、Java Lambdas(匿名関数を取り付けます)と、機能的なインターフェイス(1つの抽象的方法を備えたインターフェイス)での使用について説明します。それはラムダの構文を詳細に説明し、それらを簡潔さと読みやすさを強調する匿名の内部クラスと対比します
Java Lambdasは、Java内の機能的なプログラミングパラダイムを提供する簡潔な匿名関数です。それらは本質的に、方法の引数として渡されたり、変数に保存されたりすることができるコードのブロックです。それらを使用するには、機能的なインターフェイスが必要です。これは、1つの抽象的なメソッドを持つインターフェイスです(ただし、複数のデフォルトメソッドまたは静的メソッドを持つことができます)。 Lambda式の署名は、機能的インターフェイスの抽象的な方法と暗黙的に一致します。
Runnable
インターフェイス(組み込みの機能インターフェイス)を使用した簡単な例を次に示します。
<code class="java">Runnable myRunnable = () -> System.out.println("Hello from a lambda!"); new Thread(myRunnable).start();</code>
このコードは、lambda expression () -> System.out.println("Hello from a lambda!");
これにより、 Runnable
インターフェイスのrun()
メソッドを実装します。空の括弧()
は、ラムダが議論をしないことを示します。矢印->
パラメーターリストを本体から分離します。
パラメーターを備えたラムダを使用する別の例:
<code class="java">interface StringOperation { String operate(String str); } StringOperation reverseString = (str) -> new StringBuilder(str).reverse().toString(); String reversed = reverseString.operate("hello"); // reversed will be "olleh"</code>
ここでは、 StringOperation
は機能的なインターフェイスです。 lambda式(str) -> new StringBuilder(str).reverse().toString()
String
引数( str
)を取り、反転したString
を返します。
匿名の内部クラスは、同様の機能を達成しますが、ラムダよりもはるかに冗長です。 Lambdasを使用すると、いくつかの重要な利点があります。
Runnable
例をもう一度考えてみましょう。匿名の内部クラスに相当するものは次のとおりです。
<code class="java">Runnable myRunnable = new Runnable() { @Override public void run() { System.out.println("Hello from an anonymous inner class!"); } }; new Thread(myRunnable).start();</code>
これは、ラムダバージョンよりも明らかに長く、表現力が低いです。
独自の機能インターフェイスを作成するのは簡単です。 1つの抽象的なメソッドでインターフェイスを定義するだけです。必要に応じて、デフォルトのメソッドと静的メソッドを追加できます。 @FunctionalInterface
アノテーションはオプションですが、推奨されます。コンパイラが単一の抽象メソッドルールを強制し、エラーを早期にキャッチするのに役立ちます。
<code class="java">@FunctionalInterface interface MyFunctionalInterface { int calculate(int a, int b); default int add(int a, int b){ return ab; } } // Usage MyFunctionalInterface myOperation = (a, b) -> a * b; int result = myOperation.calculate(5, 3); // result will be 15 int sum = myOperation.add(5,3); // result will be 8</code>
この例では、 MyFunctionalInterface
は、1つの抽象的なメソッドcalculate()
を備えた機能的なインターフェイスです。 @FunctionalInterface
アノテーションはこれを示します。 add()
メソッドはデフォルトメソッドです。
Java Lambdasは、多くの既存のJavaライブラリとフレームワークによって広くサポートされています。それらはコアJava APIに統合されており、一般的に使用されます。
たとえば、Streams APIでLambdasを使用してください。
<code class="java">List<integer> numbers = Arrays.asList(1, 2, 3, 4, 5); int sum = numbers.stream().map(n -> n * 2).sum(); // sum will be 30</integer></code>
このコードは、ストリームパイプライン内のlambda n -> n * 2
を使用して、合計する前に各数値を2倍にします。これは、従来の反復を使用することと比較して、はるかにクリーンなアプローチです。ラムダの広範な採用は、それらを現代のジャバ開発の重要な部分にしています。
以上がJava Lambdasと機能的なインターフェイスを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。