目次
Java Lambdasと機能的なインターフェイスの使用方法
匿名の内部クラスに対するJava Lambdasの利点
Javaで独自の機能インターフェイスを作成します
既存のライブラリとフレームワークを使用してJava Lambdasを使用します
ホームページ Java &#&チュートリアル Java Lambdasと機能的なインターフェイスを使用するにはどうすればよいですか?

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

Mar 11, 2025 pm 05:50 PM

この記事では、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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? 会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? Apr 19, 2025 pm 04:51 PM

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

名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? 名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? Apr 19, 2025 pm 11:30 PM

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

MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? Apr 19, 2025 pm 06:21 PM

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

Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Apr 19, 2025 pm 11:45 PM

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

エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? Apr 19, 2025 pm 11:42 PM

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

Javaオブジェクトを配列に安全に変換する方法は? Javaオブジェクトを配列に安全に変換する方法は? Apr 19, 2025 pm 11:33 PM

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

Redisキャッシュソリューションを使用して、製品ランキングリストの要件を効率的に実現する方法は? Redisキャッシュソリューションを使用して、製品ランキングリストの要件を効率的に実現する方法は? Apr 19, 2025 pm 11:36 PM

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

eコマースプラットフォームSKUおよびSPUデータベースデザイン:ユーザー定義の属性と原因のない製品の両方を考慮する方法は? eコマースプラットフォームSKUおよびSPUデータベースデザイン:ユーザー定義の属性と原因のない製品の両方を考慮する方法は? Apr 19, 2025 pm 11:27 PM

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

See all articles