ホームページ > Java > &#&チュートリアル > Java Lambdasと機能的なインターフェイスを使用するにはどうすればよいですか?

Java Lambdasと機能的なインターフェイスを使用するにはどうすればよいですか?

百草
リリース: 2025-03-11 17:50:04
オリジナル
172 人が閲覧しました

この記事では、Java Lambdas(匿名関数を取り付けます)と、機能的なインターフェイス(1つの抽象的方法を備えたインターフェイス)での使用について説明します。それはラムダの構文を詳細に説明し、それらを簡潔さと読みやすさを強調する匿名の内部クラスと対比します

Java Lambdasと機能的なインターフェイスを使用するにはどうすればよいですか?

Java Lambdasと機能的なインターフェイスの使用方法

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を返します。

匿名の内部クラスに対するJava Lambdasの利点

匿名の内部クラスは、同様の機能を達成しますが、ラムダよりもはるかに冗長です。 Lambdasを使用すると、いくつかの重要な利点があります。

  • Brevity: Lambdasははるかに簡潔で、よりクリーンで読みやすいコードにつながります。これにより、必要なボイラープレートコードの量が減少します。
  • 読みやすさの向上: 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>
ログイン後にコピー

これは、ラムダバージョンよりも明らかに長く、表現力が低いです。

Javaで独自の機能インターフェイスを作成します

独自の機能インターフェイスを作成するのは簡単です。 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 Lambdasは、多くの既存のJavaライブラリとフレームワークによって広くサポートされています。それらはコアJava APIに統合されており、一般的に使用されます。

  • Java Streams API: Streams APIは、データの収集を効率的に処理するためにLambdasに大きく依存しています。
  • Swing and Javafx:これらのUIフレームワークでのイベント処理は、Lambdasを使用して大幅に簡素化できます。
  • スプリングフレームワーク:スプリングは、依存関係の注入、イベントの取り扱い、その他の側面のためにラムダスを広範囲に利用します。
  • 他の多くのライブラリ:多数のサードパーティライブラリが、より簡潔で機能的なコードのために、ラムダを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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート