国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ Java &#&ベース Java 8 の糖衣構(gòu)文であるラムダ式の紹介

Java 8 の糖衣構(gòu)文であるラムダ式の紹介

Feb 18, 2021 pm 06:09 PM
java8 lambda

Java 8 の糖衣構(gòu)文であるラムダ式の紹介

#無料學習の推奨事項:

java 基本チュートリアル

##1. ラムダ式の概要


ラムダ式は Java8 の新機能であり、Java8 で最も學ぶ価値のある新機能の 1 つです。 (もう 1 つの新機能はフロー プログラミングです。)

    ラムダ式は本質(zhì)的に、
  • 匿名メソッド

    です。この匿名メソッドを使用して、インターフェースにメソッドを 実裝できます。

    関數(shù): ラムダ式は通常、
  • インターフェイスの実裝を簡素化するために使用されます
  • 。インターフェースの実裝には、①インターフェースの実裝クラスを設計する、②匿名內(nèi)部クラスを使用するなど、さまざまな方法があります。ただし、この 2 つの方法よりも、③のラムダ式を使用する方が簡単です。

    要件: ラムダ式、
  • 関數(shù)型インターフェイスのみ実裝可能
  • : つまり、インターフェイスには、実裝クラスが実裝する必要がある抽象メソッドが 1 つだけあります。

@FunctionalInterface アノテーション
は、インターフェイスの前に使用され、インターフェイスが機能インターフェイスであるかどうかを判斷するために使用されます。機能するインターフェイスではない場合、エラーが報告されます。この機能は @Override に似ています。

2. ラムダ式の構(gòu)文

ラムダ式は本質(zhì)的に匿名メソッドであるため、ラムダ式を作成するときは必要ありません。メソッド名が何であるかだけでよく、戻り値の型を気にする必要はありません。注意する必要があるのは、

パラメータ リスト

メソッド本體の 2 つの部分だけです。

() パラメータ部分: メソッドのパラメータ リストは、パラメータの數(shù)とタイプを含め、実裝されたインターフェイスのメソッド パラメータ部分と一致している必要があります。
    {}メソッド本體部: メソッドの実裝部分。インターフェースで定義したメソッドに戻り値がある場合は、戻り値に注意して実裝してください。
  • -> : パラメータ部分とメソッド本體部分を分離します。
Lambda表達式基礎語法:(參數(shù))?->{
	方法體}
  • 以下では、異なるパラメーターと戻り値を持つ 6 種類の 関數(shù)インターフェース
    を定義し、ラムダ式を使用してインターフェースにメソッドを?qū)g裝します。

    Java 8 の糖衣構(gòu)文であるラムダ式の紹介#以下は、上記の 6 つの関數(shù)インターフェイスのラムダ式の実裝です。

    /**
    ?*?@Description:
    ?*?@author?Guoqianliang
    ?*?@date?19:50?-?2021/2/15
    ?*/public?class?BasicSyntax?{
    ????public?static?void?main(String[]?args)?{
    ????????//?1.實現(xiàn)無參數(shù),無返回值的函數(shù)式接口
    ????????NoneReturnNoneParameter?lambda1?=?()?->?{
    ????????????System.out.println("這是無參,無返回值的方法");
    ????????};
    ????????lambda1.test();
    
    ????????//?2.實現(xiàn)一個參數(shù),無返回值的函數(shù)式接口
    ????????NoneReturnSingleParameter?lambda2?=?(int?a)?->?{
    ????????????System.out.println("這是一個參數(shù),無返回值的方法,參數(shù)a:"?+?a);
    ????????};
    ????????lambda2.test(10);
    
    ????????//?3.實現(xiàn)多個參數(shù),無返回值的函數(shù)式接口
    ????????NoneReturnMutipleParameter?lambda3?=?(int?a,?int?b)?->?{
    ????????????System.out.println("這是多個參數(shù),無返回值的方法,參數(shù)a="?+?a?+?",b="?+?b);
    ????????};
    ????????lambda3.test(10,?20);
    
    ????????//?4.實現(xiàn)無參數(shù),有返回值有返回值的函數(shù)式接口
    ????????SingleReturnNoneParameter?lambda4?=?()?->?{
    ????????????System.out.println("這是無參數(shù),有返回值的方法,返回值是:");
    ????????????return?10;
    ????????};
    ????????System.out.println(lambda4.test());
    
    ????????//?5.實現(xiàn)一個參數(shù),有返回值的函數(shù)式接口
    ????????SingleReturnSingleParameter?lambda5?=?(int?a)?->?{
    ????????????System.out.println("這是一個參數(shù),有返回值的方法,返回值是:");
    ????????????return?a;
    ????????};
    ????????System.out.println(lambda5.test(10));
    
    ????????//?6.實現(xiàn)多個參數(shù),有返回值的函數(shù)式接口
    ????????SingleReturnMutipleParameter?lambda6?=?(int?a,?int?b)?->?{
    ????????????System.out.println("這是多個參數(shù),有返回值的方法,返回值是:");
    ????????????return?a?+?b;
    ????????};
    ????????System.out.println(lambda6.test(1,?2));
    ????}}

    構(gòu)文の簡略化と高度化:

    パラメータ リストのパラメータ タイプは省略できます。

      パラメータ リストにパラメータが 1 つだけある場合は、括弧を省略できます。
    • メソッド本體にステートメントが 1 つだけある場合は、中括弧を省略できます。 (注: このステートメントが return ステートメントである場合、中括弧を省略した後、return キーワードも省略する必要があります)
    • #3. 関數(shù)リファレンス

    # #Lambda 式はインターフェイスを簡素化するためのものです。ラムダ式では、より複雑なロジックを使用しないでください。処理する必要があるロジックが比較的複雑な場合は、通常、別のメソッドが作成されます。このメソッドをラムダ式で直接參照するだけです。つまり、 は既存のメソッドを參照するため、ラムダ式を置き換えてインターフェイスの実裝を完了できます。

    #1. 靜的メソッドのリファレンス

    構(gòu)文:

    Class::靜的メソッド

    引用されたメソッドの後にかっこを追加しないでください。

    參照されるメソッド、パラメータ (數(shù)値、型)、および戻り値は、インターフェイスで定義されているものと一致している必要があります。

      /**
      ?*?@Description:?方法引用
      ?*?@author?Guoqianliang
      ?*?@date?0:26?-?2021/2/16
      ?*/public?class?Lambda1?{
      
      ????private?static?interface?Calculate?{
      ????????int?calculate(int?a,?int?b);
      ????}
      
      ????private?static?int?calculate(int?x,?int?y)?{
      ????????if?(x?>?y)?{
      ????????????return?x?-?y;
      ????????}?else?if?(x?
    • 2. 非靜的メソッドのリファレンス
    • 構(gòu)文:

      Object::非靜的メソッド

      引用符で囲まれたメソッドの後にかっこを追加しないでください。

      參照されるメソッド、パラメータ (數(shù)値、型)、および戻り値は、インターフェイスで定義されているものと一致している必要があります。

      #
      /**
      ?*?@Description:?方法引用
      ?*?@author?Guoqianliang
      ?*?@date?0:26?-?2021/2/16
      ?*/public?class?Lambda1?{
      
      ????private?static?interface?Calculate?{
      ????????int?calculate(int?a,?int?b);
      ????}
      
      ????//?非靜態(tài)方法
      ????private?int?calculate2(int?a,?int?b)?{
      ????????if?(a?!=?b)?{
      ????????????return?a?-?b;
      ????????}
      ????????return?a?+?b;
      ????}
      
      ????public?static?void?main(String[]?args)?{
      ????????//?非靜態(tài)方法引用
      ????????Calculate?calculate2?=?new?Lambda1()::calculate2;
      ????????System.out.println(calculate.calculate(10,?20));
      ????}}
      • 3. コンストラクター メソッドのリファレンス
      構(gòu)文:
      クラス名::new

      インターフェイス內(nèi)のメソッドのパラメーターを通じて、さまざまなコンストラクター メソッドを區(qū)別できます。

      関數(shù)型インターフェイスで定義されたメソッドが、クラスのオブジェクトを取得するだけの場合。この時點で、コンストラクター メソッドへの參照を使用して、このメソッドの実裝を簡素化できます。

      /**
      ?*?@Description:?構(gòu)造方法引用
      ?*?@author?Guoqianliang
      ?*?@date?11:20?-?2021/2/16
      ?*/public?class?Lambda2?{
      
      ????@FunctionalInterface
      ????private?interface?GetPersonWithNoneParameter?{
      ????????Person?get();
      ????}
      
      ????@FunctionalInterface
      ????private?interface?GetPersonWithSingleParameter?{
      ????????Person?get(String?name);
      ????}
      
      ????@FunctionalInterface
      ????private?interface?GetPersonWithMutipleParameter?{
      ????????Person?get(String?name,?int?age);
      ????}
      
      ????private?static?class?Person?{
      ????????String?name;
      ????????int?age;
      
      ????????public?Person()?{
      ????????????System.out.println("Person類的無參構(gòu)造方法執(zhí)行了");
      ????????}
      
      ????????public?Person(String?name)?{
      ????????????this.name?=?name;
      ????????????System.out.println("Person類的有參構(gòu)造方法執(zhí)行了");
      ????????}
      
      ????????public?Person(String?name,?int?age)?{
      ????????????this.name?=?name;
      ????????????this.age?=?age;
      ????????????System.out.println("Person類的兩個參數(shù)的構(gòu)造方法執(zhí)行了");
      ????????}
      ????}
      
      ????public?static?void?main(String[]?args)?{
      ????????//?1.使用lambda表達式,實現(xiàn)GetPersonWithNoneParameter接口
      ????????GetPersonWithNoneParameter?getPerson?=?Person::new;
      ????????//?2.使用lambda表達式,實現(xiàn)GetPersonWithSingleParameter接口
      ????????GetPersonWithSingleParameter?getPerson2?=?Person::new;
      ????????//?3.使用lambda表達式,實現(xiàn)GetPersonWithMutipleParameter接口
      ????????GetPersonWithMutipleParameter?getPerson3?=?Person::new;
      
      ????????System.out.println(getPerson.get());
      ????????System.out.println(getPerson2.get("樹先生"));
      ????????System.out.println(getPerson3.get("你好",?23));
      ????}}
      • 4. オブジェクト メソッドへの特別な參照
      ラムダ式を使用して特定のインターフェイスを?qū)g裝する場合、ラムダ式に次のものが含まれている場合メソッド本體で、このオブジェクトを直接使用してメソッドの 1 つを呼び出すと、全體的なロジックを完成させることができます。

      /**
      ?*?@Description:?對象方法的特殊應用
      ?*?@author?Guoqianliang
      ?*?@date?11:54?-?2021/2/16
      ?*/public?class?Lambda3?{
      
      ????@FunctionalInterface
      ????private?interface?MyInterface?{
      ????????//?String?get(Person?person);
      ????????void?set(Person?person,?String?name);
      ????}
      
      ????private?static?class?Person?{
      ????????private?String?name;
      
      ????????public?void?setName(String?name)?{
      ????????????this.name?=?name;
      ????????}
      
      ????????public?String?getName()?{
      ????????????return?name;
      ????????}
      ????}
      
      ????public?static?void?main(String[]?args)?{
      ????????Person?p1?=?new?Person();
      ????????p1.setName("小明");//????????邏輯實現(xiàn)只是為了獲取到對象的名字//????????MyInterface?lambda2?=?Person::getName;//????????System.out.println(lambda2.get(p1));
      ????????
      ????????//?邏輯實現(xiàn)只是為了給對象的某些屬性進行賦值
      ????????MyInterface?lambda1?=?(x,?n)?->?x.setName(n);
      ????????MyInterface?lambda2?=?Person::setName;
      ????????lambda2.set(p1,?"李華");
      ????????System.out.println(p1.getName());
      ????}}
      4. ラムダ式で注意すべき問題

      ローカル変數(shù)

      を使用する場合、それらは次のように宣言されます。デフォルト 定數(shù)のため、値は変更できません。

      /**
      ?*?@Description:
      ?*?@author?Guoqianliang
      ?*?@date?13:05?-?2021/2/16
      ?*/public?class?Lambda4?{
      ????public?static?void?main(String[]?args)?{
      ????????//?1.定義一個局部變量
      ????????int?x?=?10;
      ????????//?2.使用lambda表達式實現(xiàn)接口
      ????????LambdaTest?lambda?=?()?->?{
      ????????????System.out.println("x="?+?x);
      ????????};
      ????????//?3.?無法修改常量x
      ????????//?x=20;
      ????}}@FunctionalInterfaceinterface?LambdaTest?{
      ????void?test();}

      関連する學習の推奨事項:

      Java の基礎

      以上がJava 8 の糖衣構(gòu)文であるラムダ式の紹介の詳細內(nèi)容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

    • このウェブサイトの聲明
      この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當する法的責任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

      ホットAIツール

      Undress AI Tool

      Undress AI Tool

      脫衣畫像を無料で

      Undresser.AI Undress

      Undresser.AI Undress

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

      AI Clothes Remover

      AI Clothes Remover

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

      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 統(tǒng)合開発環(huán)境

      ドリームウィーバー CS6

      ドリームウィーバー CS6

      ビジュアル Web 開発ツール

      SublimeText3 Mac版

      SublimeText3 Mac版

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

      ラムダ式は C++ の例外をどのように処理しますか? ラムダ式は C++ の例外をどのように処理しますか? Apr 17, 2024 pm 12:42 PM

      C++ では、Lambda 式を使用して例外を処理する方法が 2 つあります。try-catch ブロックを使用して例外をキャッチする方法と、catch ブロックで例外を処理または再スローする方法です。 std::function 型のラッパー関數(shù)を使用すると、その try_emplace メソッドで Lambda 式の例外をキャッチできます。

      C++ ラムダ式におけるクロージャの意味は何ですか? C++ ラムダ式におけるクロージャの意味は何ですか? Apr 17, 2024 pm 06:15 PM

      C++ では、クロージャは外部変數(shù)にアクセスできるラムダ式です。クロージャを作成するには、ラムダ式の外部変數(shù)をキャプチャします。クロージャには、再利用性、情報の隠蔽、評価の遅延などの利點があります。これらは、イベント ハンドラーなど、外部変數(shù)が破棄されてもクロージャが外部変數(shù)にアクセスできる現(xiàn)実の狀況で役立ちます。

      マルチスレッド プログラミングに C++ ラムダ式を使用する利點は何ですか? マルチスレッド プログラミングに C++ ラムダ式を使用する利點は何ですか? Apr 17, 2024 pm 05:24 PM

      C++ マルチスレッド プログラミングにおけるラムダ式の利點には、シンプルさ、柔軟性、パラメータの受け渡しの容易さ、並列処理が含まれます。実際のケース: ラムダ式を使用してマルチスレッドを作成し、異なるスレッドでスレッド ID を出力します。これは、このメソッドのシンプルさと使いやすさを示しています。

      Java 8で1年前または1年後の日付を計算するにはどうすればよいですか? Java 8で1年前または1年後の日付を計算するにはどうすればよいですか? Apr 26, 2023 am 09:22 AM

      Java8 は、minus() メソッドを使用して 1 年前の日付または 1 年後の日付を計算し、1 年前の日付を計算します。 packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo09{publicstaticvoidmain(String[ ]args ){LocalDatetoday=LocalDate.now();LocalDateprevious Year=today.minus(1,ChronoUni

      C++ラムダ式でクロージャを?qū)g裝するにはどうすればよいですか? C++ラムダ式でクロージャを?qū)g裝するにはどうすればよいですか? Jun 01, 2024 pm 05:50 PM

      C++ ラムダ式は、関數(shù)スコープ変數(shù)を保存し、関數(shù)からアクセスできるようにするクロージャーをサポートしています。構(gòu)文は [キャプチャリスト](パラメータ)->戻り値の型{関數(shù)本體} です。 Capture-list は、キャプチャする変數(shù)を定義します。[=] を使用してすべてのローカル変數(shù)を値によってキャプチャするか、[&] を使用してすべてのローカル変數(shù)を參照によってキャプチャするか、[variable1, variable2,...] を使用して特定の変數(shù)をキャプチャできます。ラムダ式はキャプチャされた変數(shù)にのみアクセスできますが、元の値を変更することはできません。

      C++ 関數(shù)呼び出しのラムダ式: パラメーターの受け渡しと戻り値のコールバックの最適化 C++ 関數(shù)呼び出しのラムダ式: パラメーターの受け渡しと戻り値のコールバックの最適化 May 03, 2024 pm 12:12 PM

      C++ では、ラムダ式を関數(shù)パラメータとして使用して、コールバック関數(shù)の柔軟性を?qū)g現(xiàn)できます。具體的には: パラメーターの受け渡し: std::function を介して Lambda 式をラップし、関數(shù)ポインターの形式で関數(shù)に渡します。戻り値の処理: std::functionでコールバック関數(shù)のポインタを宣言する際の戻り値の型を指定します。実踐的なケース: GUI イベント処理のコールバックを最適化し、不要なオブジェクトや関數(shù)ポインターの作成を回避し、コードの単純さと保守性を向上させます。

      C++ ラムダ式はどのようにして外部変數(shù)をキャプチャするのでしょうか? C++ ラムダ式はどのようにして外部変數(shù)をキャプチャするのでしょうか? Apr 17, 2024 pm 04:39 PM

      C++ で外部変數(shù)のラムダ式をキャプチャするには、次の 3 つの方法があります。 値によるキャプチャ: 変數(shù)のコピーを作成します。參照によるキャプチャ: 変數(shù)參照を取得します。値と參照による同時キャプチャ: 値または參照による複數(shù)の変數(shù)のキャプチャを許可します。

      C++ ラムダ式を使用して遅延評価を?qū)g行するにはどうすればよいですか? C++ ラムダ式を使用して遅延評価を?qū)g行するにはどうすればよいですか? Apr 17, 2024 pm 12:36 PM

      C++ ラムダ式を使用して遅延評価を?qū)g行するにはどうすればよいですか?ラムダ式を使用して、遅延評価される関數(shù)オブジェクトを作成します。遅延計算により、必要になるまで実行が延期されます。必要な場合にのみ結(jié)果を計算し、パフォーマンスを向上させます。

      See all articles