Java Lambdasと機能的なインターフェイスを使用するにはどうすればよいですか?
この記事では、Java Lambdas(匿名関数を取り付けます)と、機能的なインターフェイス(1つの抽象的方法を備えたインターフェイス)での使用について説明します。それはラムダの構文を詳細に説明し、それらを簡潔さと読みやすさを強調する匿名の内部クラスと対比します
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 サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











一部のアプリケーションが適切に機能しないようにする会社のセキュリティソフトウェアのトラブルシューティングとソリューション。多くの企業は、内部ネットワークセキュリティを確保するためにセキュリティソフトウェアを展開します。 ...

多くのアプリケーションシナリオでソートを実装するために名前を数値に変換するソリューションでは、ユーザーはグループ、特に1つでソートする必要がある場合があります...

システムドッキングでのフィールドマッピング処理は、システムドッキングを実行する際に難しい問題に遭遇することがよくあります。システムのインターフェイスフィールドを効果的にマッピングする方法A ...

intellijideaultimatiateバージョンを使用してスプリングを開始します...

データベース操作にMyBatis-Plusまたはその他のORMフレームワークを使用する場合、エンティティクラスの属性名に基づいてクエリ条件を構築する必要があることがよくあります。あなたが毎回手動で...

Javaオブジェクトと配列の変換:リスクの詳細な議論と鋳造タイプ変換の正しい方法多くのJava初心者は、オブジェクトのアレイへの変換に遭遇します...

Redisキャッシュソリューションは、製品ランキングリストの要件をどのように実現しますか?開発プロセス中に、多くの場合、ランキングの要件に対処する必要があります。

eコマースプラットフォーム上のSKUおよびSPUテーブルの設計の詳細な説明この記事では、eコマースプラットフォームでのSKUとSPUのデータベース設計の問題、特にユーザー定義の販売を扱う方法について説明します。
