#無料学習の推奨事項:##1. ラムダ式の概要
- ラムダ式は本質的に、
- 匿名メソッド
です。この匿名メソッドを使用して、インターフェースにメソッドを
関数: ラムダ式は通常、実装できます。
インターフェイスの実装を簡素化するために使用されます - 。インターフェースの実装には、①インターフェースの実装クラスを設計する、②匿名内部クラスを使用するなど、さまざまな方法があります。ただし、この 2 つの方法よりも、③のラムダ式を使用する方が簡単です。
要件: ラムダ式、 関数型インターフェイスのみ実装可能 - : つまり、インターフェイスには、実装クラスが実装する必要がある抽象メソッドが 1 つだけあります。
は、インターフェイスの前に使用され、インターフェイスが機能インターフェイスであるかどうかを判断するために使用されます。機能するインターフェイスではない場合、エラーが報告されます。この機能は @Override に似ています。2. ラムダ式の構文
ラムダ式は本質的に匿名メソッドであるため、ラムダ式を作成するときは必要ありません。メソッド名が何であるかだけでよく、戻り値の型を気にする必要はありません。注意する必要があるのは、
パラメータ リスト、メソッド本体
() パラメータ部分: メソッドのパラメータ リストは、パラメータの数とタイプを含め、実装されたインターフェイスのメソッド パラメータ部分と一致している必要があります。の 2 つの部分だけです。
- {}メソッド本体部: メソッドの実装部分。インターフェースで定義したメソッドに戻り値がある場合は、戻り値に注意して実装してください。
- -> : パラメータ部分とメソッド本体部分を分離します。
Lambda表达式基础语法:(参数) ->{ 方法体}
を定義し、ラムダ式を使用してインターフェースにメソッドを実装します。
#以下は、上記の 6 つの関数インターフェイスのラムダ式の実装です。
/** * @Description: * @author Guoqianliang * @date 19:50 - 2021/2/15 */public class BasicSyntax { public static void main(String[] args) { // 1.实现无参数,无返回值的函数式接口 NoneReturnNoneParameter lambda1 = () -> { System.out.println("这是无参,无返回值的方法"); }; lambda1.test(); // 2.实现一个参数,无返回值的函数式接口 NoneReturnSingleParameter lambda2 = (int a) -> { System.out.println("这是一个参数,无返回值的方法,参数a:" + a); }; lambda2.test(10); // 3.实现多个参数,无返回值的函数式接口 NoneReturnMutipleParameter lambda3 = (int a, int b) -> { System.out.println("这是多个参数,无返回值的方法,参数a=" + a + ",b=" + b); }; lambda3.test(10, 20); // 4.实现无参数,有返回值有返回值的函数式接口 SingleReturnNoneParameter lambda4 = () -> { System.out.println("这是无参数,有返回值的方法,返回值是:"); return 10; }; System.out.println(lambda4.test()); // 5.实现一个参数,有返回值的函数式接口 SingleReturnSingleParameter lambda5 = (int a) -> { System.out.println("这是一个参数,有返回值的方法,返回值是:"); return a; }; System.out.println(lambda5.test(10)); // 6.实现多个参数,有返回值的函数式接口 SingleReturnMutipleParameter lambda6 = (int a, int b) -> { System.out.println("这是多个参数,有返回值的方法,返回值是:"); return a + b; }; System.out.println(lambda6.test(1, 2)); }}構文の簡略化と高度化:
パラメータ リストのパラメータ タイプは省略できます。
- パラメータ リストにパラメータが 1 つだけある場合は、括弧を省略できます。
- メソッド本体にステートメントが 1 つだけある場合は、中括弧を省略できます。 (注: このステートメントが return ステートメントである場合、中括弧を省略した後、return キーワードも省略する必要があります)
- #3. 関数リファレンス
# #Lambda 式はインターフェイスを簡素化するためのものです。ラムダ式では、より複雑なロジックを使用しないでください。処理する必要があるロジックが比較的複雑な場合は、通常、別のメソッドが作成されます。このメソッドをラムダ式で直接参照するだけです。つまり、 は既存のメソッドを参照するため、ラムダ式を置き換えてインターフェイスの実装を完了できます。
構文:#1. 静的メソッドのリファレンス
Class::静的メソッド
引用されたメソッドの後にかっこを追加しないでください。構文:
参照されるメソッド、パラメータ (数値、型)、および戻り値は、インターフェイスで定義されているものと一致している必要があります。
/** * @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 (x2. 非静的メソッドのリファレンス
Object::非静的メソッド
引用符で囲まれたメソッドの後にかっこを追加しないでください。クラス名::new#
参照されるメソッド、パラメータ (数値、型)、および戻り値は、インターフェイスで定義されているものと一致している必要があります。
/** * @Description: 方法引用 * @author Guoqianliang * @date 0:26 - 2021/2/16 */public class Lambda1 { private static interface Calculate { int calculate(int a, int b); } // 非静态方法 private int calculate2(int a, int b) { if (a != b) { return a - b; } return a + b; } public static void main(String[] args) { // 非静态方法引用 Calculate calculate2 = new Lambda1()::calculate2; System.out.println(calculate.calculate(10, 20)); }}構文:
- 3. コンストラクター メソッドのリファレンス
インターフェイス内のメソッドのパラメーターを通じて、さまざまなコンストラクター メソッドを区別できます。
関数型インターフェイスで定義されたメソッドが、クラスのオブジェクトを取得するだけの場合。この時点で、コンストラクター メソッドへの参照を使用して、このメソッドの実装を簡素化できます。
/** * @Description: 构造方法引用 * @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类的无参构造方法执行了"); } public Person(String name) { this.name = name; System.out.println("Person类的有参构造方法执行了"); } public Person(String name, int age) { this.name = name; this.age = age; System.out.println("Person类的两个参数的构造方法执行了"); } } public static void main(String[] args) { // 1.使用lambda表达式,实现GetPersonWithNoneParameter接口 GetPersonWithNoneParameter getPerson = Person::new; // 2.使用lambda表达式,实现GetPersonWithSingleParameter接口 GetPersonWithSingleParameter getPerson2 = Person::new; // 3.使用lambda表达式,实现GetPersonWithMutipleParameter接口 GetPersonWithMutipleParameter getPerson3 = Person::new; System.out.println(getPerson.get()); System.out.println(getPerson2.get("树先生")); System.out.println(getPerson3.get("你好", 23)); }}ラムダ式を使用して特定のインターフェイスを実装する場合、ラムダ式に次のものが含まれている場合メソッド本体で、このオブジェクトを直接使用してメソッドの 1 つを呼び出すと、全体的なロジックを完成させることができます。
- 4. オブジェクト メソッドへの特別な参照
/** * @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("小明");// 逻辑实现只是为了获取到对象的名字// MyInterface lambda2 = Person::getName;// System.out.println(lambda2.get(p1)); // 逻辑实现只是为了给对象的某些属性进行赋值 MyInterface lambda1 = (x, n) -> x.setName(n); MyInterface lambda2 = Person::setName; lambda2.set(p1, "李华"); System.out.println(p1.getName()); }}4. ラムダ式で注意すべき問題
ローカル変数
を使用する場合、それらは次のように宣言されます。デフォルト 定数のため、値は変更できません。
/** * @Description: * @author Guoqianliang * @date 13:05 - 2021/2/16 */public class Lambda4 { public static void main(String[] args) { // 1.定义一个局部变量 int x = 10; // 2.使用lambda表达式实现接口 LambdaTest lambda = () -> { System.out.println("x=" + x); }; // 3. 无法修改常量x // x=20; }}@FunctionalInterfaceinterface LambdaTest { void test();}
関連する学習の推奨事項:
Java の基礎
以上がJava 8 の糖衣構文であるラムダ式の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

在C++中,使用Lambda表达式处理异常有两种方法:使用try-catch块捕获异常,并在catch块中处理或重新抛出异常。使用std::function类型的包装函数,其try_emplace方法可以捕获Lambda表达式中的异常。

Java8计算一年前或一年后的日期利用minus()方法计算一年前的日期packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo09{publicstaticvoidmain(String[]args){LocalDatetoday=LocalDate.now();LocalDatepreviousYear=today.minus(1,ChronoUni

lambda表达式在C++多线程编程中的优势包括:简洁性、灵活性、易于传参和并行性。实战案例:使用lambda表达式创建多线程,在不同线程中打印线程ID,展示了该方法的简洁和易用性。

在C++中捕获外部变量的lambda表达式有三种方法:按值捕获:创建一个变量副本。按引用捕获:获得变量引用。同时按值和引用捕获:允许捕获多个变量,按值或按引用。

Java8如何计算一周后的日期这个例子会计算一周后的日期。LocalDate日期不包含时间信息,它的plus()方法用来增加天、周、月,ChronoUnit类声明了这些时间单位。由于LocalDate也是不变类型,返回后一定要用变量赋值。packagecom.shxt.demo02;importjava.time.LocalDate;importjava.time.temporal.ChronoUnit;publicclassDemo08{publicstaticvoidmain(String[

如何使用C++lambda表达式执行延迟求值?使用lambda表达式创建延迟求值的函数对象。延迟计算推迟到需要时才执行。仅当需要时才计算结果,提高性能。

使用C++lambda表达式时需注意:小心捕获变量,避免意外修改。可通过引用或值捕获变量,引用捕获用于修改外部变量。lambda表达式生命周期与捕获它的函数不同,可能导致内存泄漏。考虑使用函数指针或函数对象以优化性能。

在C++中,Lambda表达式的返回值类型通过->return-type指定,允许明确定义lambda的返回值。通过指定返回值类型,可以增强代码的可读性并避免编译器自动推断类型带来的潜在错误。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

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

ホットトピック



