動作中のラムダ式

Jan 07, 2025 am 08:12 AM

As expressões lambda em ação

ラムダ式の基本概念を実践するいくつかの簡単な例:

例 1 - ラムダなしとラムダありの実装の比較

ラムダは使用しません:

MyValueSemLambda1 インターフェース {
ダブル getValue(); // 抽象メソッド
}
クラス MyValueImpl は MyValueSemLambda1{
を実装します プライベート double 値;
// value
属性を初期化するコンストラクター public MyValueImpl(double value) {
this.value = 値;
}
// getValue メソッドの実装
@オーバーライド
public double getValue() {
this.value を返す;
}
}
パブリック クラス MyValueSemLambda {
public static void main(String[] args) {
MyValueSemLambda1 myVal = new MyValueImpl(98.6); // 属性に値を割り当てます
System.out.println("値: " myVal.getValue()); // 98.6 を印刷します
}
}

ラムダの使用:

MyValueCompare インターフェース {
double getValue();
}
パブリック クラス MyValueComparacao {
public static void main(String[] args) {
// 属性を持たないラムダ式ですが、値を返します
MyValueCompares myVal = () -> 98.6;
System.out.println("値: " myVal.getValue()); // 98.6 を印刷します
}
}

例 2 - LambdaDemo

// 関数インターフェース。
インターフェース MyValue {
double getValue();
}
// 別の関数インターフェイス。
インターフェース MyParamValue {
double getValue(double v);
}
クラス LambdaDemo {
public static void main(String args[])
{
MyValue myVal; // インターフェース参照を宣言します
// ここで、ラムダ式は単なる定数式です。
// myVal に代入されると、instance
が構築されます // ラムダ式が
を実装するクラスの // MyValue.
の getValue() メソッド myVal = () -> 98.6;単純なラムダ式
//
によって提供される getValue() を呼び出します // 以前に割り当てられたラムダ式。
System.out.println("定数値: " myVal.getValue());
// 次に、パラメーター化されたラムダ式を作成して割り当てます
// MyParamValue 参照用。このラムダ式は
を返します // 引数の逆数。
MyParamValue myPval = (n) -> 1.0/n;ラムダ式
パラメータ
があります // myPval 参照を介して getValue() を呼び出します。
System.out.println("4 の逆数は " myPval.getValue(4.0));
System.out.println("8 の逆数は " myPval.getValue(8.0));
// ラムダ式は定義されたメソッドと互換性がある必要があります
// 関数インターフェースを介して。したがって、次の手順は機能しません:
// myVal = () -> "三つ"; // エラー!文字列は double と互換性がありません!
// myPval = () -> Math.random(); // エラー!パラメータは必須です!
}
}

出力:
定数値: 98.6
4の逆数は0.25
8の逆数は0.125

  • ラムダ式は、実装する抽象メソッドと互換性がある必要があります。

非互換性の例:

  • 期待される戻り値の型が double の場合、String 値は使用できません。

  • パラメータを必要とするメソッドは、パラメータを指定しないと使用できません。

  • 関数型インターフェイスは、互換性のあるラムダ式で使用できます。

例 3 - NumericTest

割り算テスト: 最初の数値が 2 番目の数値で割り切れるかどうかを確認します。
サイズ比較: 最初の数値が 2 番目の数値より小さいかどうかを判断します。
絶対値の比較: 2 つの数値の絶対値が等しい場合に true を返します。

  • main() では、ラムダ式を使用して 3 つの異なるテストが作成されます。

// 2 つのパラメータ int と
を取る関数インターフェイス // ブール値の結果を返します。
インターフェース NumericTest {
ブール値テスト(int n, int m);
}
class LambdaDemo2 {
public static void main(String args[])
{
// このラムダ式は、数値
かどうかを決定します。 // は別の因数です。
NumericTest isFactor = (n, d) -> (n % d) == 0;
if(isFactor.test(10, 2))
System.out.println("2 は 10 の因数です");
if(!isFactor.test(10, 3))
System.out.println("3 は 10 の因数ではありません");
System.out.println();
// このラムダ式は、
の場合に true を返します。 // 最初の引数は 2 番目の引数より小さいです。
NumericTestlessThan = (n, m) -> (n if(lessThan.test(2, 10))
System.out.println("2 は 10 未満です");
if(!lessThan.test(10, 2))
System.out.println("10 は 2 未満ではありません");
System.out.println();
// このラムダ式は、
の場合に true を返します。 // 引数の絶対値は等しい
NumericTest absEqual = (n, m) -> (n if(absEqual.test(4, -4))
System.out.println("4と-4の絶対値は等しい。");
if(!lessThan.test(4, -5))
System.out.println("4 と -5 の絶対値は等しくありません。");
System.out.println();
}
}

出力:
2 は 10 の因数です
3 は 10 の因数ではありません
2 は 10 未満です
10 は 2 より小さくありません
4と-4の絶対値は等しい。
4 と -5 の絶対値は等しくありません。

  • 互換性のあるラムダ式は、同じ関数インターフェイスで使用できます。

  • 同じ参照変数を異なるラムダ式で再利用できます。

  • 変数を再利用すると読みやすくなり、コード内のリソースが節約されます。

  • この例では、同じインターフェースが異なる実装に使用されています:

NumericTest myTest;
myTest = (n, d) -> (n % d) == 0; //実装 1
if(myTest.test(10, 2))
System.out.println("2 は 10 の因数です");
// ...
myTest = (n, m) -> (n if(myTest.test(2, 10))
System.out.println("2 は 10 未満です");
//...
myTest = (n, m) -> (n if(myTest.test(4, -4))
System.out.println("4と-4の絶対値は等しい。");
// ...

参照変数による明確さ

さまざまな参照変数 (isFactor、lessThan、absEqual など) を使用すると、各変数がどのラムダ式を表すかを明確に識別するのに役立ちます。

複数パラメータ指定

ラムダ式内の複数のパラメーターは、ラムダ演算子の左側の括弧で囲まれたリスト内でカンマで区切られます。
例: (n, d) -> (n % d) == 0.

ラムダ式でのさまざまな型の使用

関数型インターフェースの抽象メソッドのパラメータや戻り値の型には制限はありません。
String などの非プリミティブ データ型はラムダ式で使用できます。

文字列を使用したテストの例

関数型インターフェイスを使用すると、ある文字列が別の文字列内に含まれているかどうかを確認するなど、特定の文字列関連の条件をテストできます。

// 2 つの文字列をテストする関数インターフェイス。
インターフェース StringTest {
boolean test(String aStr, String bStr);
}
class LambdaDemo3 {
public static void main(String args[])
{
// このラムダ式は、文字列が
であるかどうかを決定します。 // 別の一部。
StringTest isIn = (a, b) -> a.indexOf(b) != -1;
String str = "これはテストです";
System.out.println("テスト文字列: " str);
if(isIn.test(str, "is a"))
System.out.println("「は」が見つかりました。");
それ以外
System.out.println("'is a' が見つかりません。");
if(isIn.test(str, "xyz"))
System.out.println("'xyz' が見つかりました");
それ以外
System.out.println("'xyz' が見つかりません");
}
}

出力:
テスト文字列: これはテストです
「は」が見つかりました。
「xyz」が見つかりません

StringTest 関数インターフェース

ブール値を返す抽象メソッド test(String aStr, String bStr) を定義します。

ラムダ式による実装

ラムダ式 (a, b) -> a.indexOf(b) != -1 は、文字列 (b) が別の文字列 (a) に含まれているかどうかをチェックします。

パラメータでの型推論

パラメータ a と b は String 型であると推論され、indexOf などの String クラスのメソッドを使用できます。

プログラムは、文字列「This is a test」をテストして、部分文字列「is a」と「xyz」が含まれているかどうかを確認し、それに応じて結果を出力します。

以上が動作中のラムダ式の詳細内容です。詳細については、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 ...

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

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

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

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

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

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

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

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

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

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

See all articles