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

首頁(yè) Java Java基礎(chǔ) 介紹Java8語(yǔ)法糖之Lambda表達(dá)式

介紹Java8語(yǔ)法糖之Lambda表達(dá)式

Feb 18, 2021 pm 06:09 PM
java8 lambda

介紹Java8語(yǔ)法糖之Lambda表達(dá)式

免費(fèi)學(xué)習(xí)推薦:java基礎(chǔ)教學(xué)

#一、Lambda表達(dá)式簡(jiǎn)介

Lambda表達(dá)式,是Java8的一個(gè)新特性,也是Java8中最值得學(xué)習(xí)的新特性之一。 (另一個(gè)新特性是串流程式設(shè)計(jì)。)

  • Lambda表達(dá)式,本質(zhì)上是一個(gè)匿名方法??梢允褂眠@個(gè)匿名方法,實(shí)作介面中的方法。

  • 功能:通常使用Lambda表達(dá)式,是為了簡(jiǎn)化介面實(shí)作的。關(guān)於介面實(shí)作可以有多種方式實(shí)現(xiàn),例如:①設(shè)計(jì)介面的實(shí)作類別、②使用匿名內(nèi)部類別。但是③使用lambda表達(dá)式,比這兩種方式都簡(jiǎn)單。

  • 要求:lambda表達(dá)式,只能實(shí)作函數(shù)式介面:也就是一個(gè)介面中,要求實(shí)作類別必須實(shí)作的抽象方法,有且只有一個(gè)。

@FunctionalInterface註解 ,用在介面之前,用來(lái)判斷介面是否是函數(shù)式介面。如果不是函數(shù)式介面會(huì)報(bào)錯(cuò)。功能類似@Override。

二、Lambda表達(dá)式語(yǔ)法

lambda表達(dá)式本質(zhì)上是一個(gè)匿名方法,因此再寫lambda表達(dá)式時(shí),不需要關(guān)心方法名是什麼,也不需要關(guān)心回傳值類型。只需要關(guān)心兩部分:參數(shù)列表、方法體

  • ()參數(shù)部分:方法的參數(shù)列表,要求和實(shí)作的介面中的方法參數(shù)部分一致,包括參數(shù)的數(shù)量和類型。
  • {}方法體部分:方法的實(shí)作部分,如果介面中定義的方法有回傳值,則在實(shí)作時(shí),注意傳回值的回傳。
  • -> :分隔參數(shù)部分和方法體部分。
Lambda表達(dá)式基礎(chǔ)語(yǔ)法:(參數(shù))?->{
	方法體}

下面定義6種參數(shù)和傳回值各不相同的函數(shù)式介面,分別使用lambda表達(dá)式對(duì)介面中的方法進(jìn)行實(shí)作:

介紹Java8語(yǔ)法糖之Lambda表達(dá)式

下面是針對(duì)上面6種函數(shù)式介面的lambda表達(dá)式實(shí)作。

/**
?*?@Description:
?*?@author?Guoqianliang
?*?@date?19:50?-?2021/2/15
?*/public?class?BasicSyntax?{
????public?static?void?main(String[]?args)?{
????????//?1.實(shí)現(xiàn)無(wú)參數(shù),無(wú)返回值的函數(shù)式接口
????????NoneReturnNoneParameter?lambda1?=?()?->?{
????????????System.out.println("這是無(wú)參,無(wú)返回值的方法");
????????};
????????lambda1.test();

????????//?2.實(shí)現(xiàn)一個(gè)參數(shù),無(wú)返回值的函數(shù)式接口
????????NoneReturnSingleParameter?lambda2?=?(int?a)?->?{
????????????System.out.println("這是一個(gè)參數(shù),無(wú)返回值的方法,參數(shù)a:"?+?a);
????????};
????????lambda2.test(10);

????????//?3.實(shí)現(xiàn)多個(gè)參數(shù),無(wú)返回值的函數(shù)式接口
????????NoneReturnMutipleParameter?lambda3?=?(int?a,?int?b)?->?{
????????????System.out.println("這是多個(gè)參數(shù),無(wú)返回值的方法,參數(shù)a="?+?a?+?",b="?+?b);
????????};
????????lambda3.test(10,?20);

????????//?4.實(shí)現(xiàn)無(wú)參數(shù),有返回值有返回值的函數(shù)式接口
????????SingleReturnNoneParameter?lambda4?=?()?->?{
????????????System.out.println("這是無(wú)參數(shù),有返回值的方法,返回值是:");
????????????return?10;
????????};
????????System.out.println(lambda4.test());

????????//?5.實(shí)現(xiàn)一個(gè)參數(shù),有返回值的函數(shù)式接口
????????SingleReturnSingleParameter?lambda5?=?(int?a)?->?{
????????????System.out.println("這是一個(gè)參數(shù),有返回值的方法,返回值是:");
????????????return?a;
????????};
????????System.out.println(lambda5.test(10));

????????//?6.實(shí)現(xiàn)多個(gè)參數(shù),有返回值的函數(shù)式接口
????????SingleReturnMutipleParameter?lambda6?=?(int?a,?int?b)?->?{
????????????System.out.println("這是多個(gè)參數(shù),有返回值的方法,返回值是:");
????????????return?a?+?b;
????????};
????????System.out.println(lambda6.test(1,?2));
????}}

語(yǔ)法精簡(jiǎn)進(jìn)階:

  • 參數(shù)清單的參數(shù)類型可以省略。
  • 如果參數(shù)清單中的參數(shù)有且只有一個(gè),可以省略小括號(hào)。
  • 如果方法體中只有一條語(yǔ)句,可以省略大括號(hào)。 (註:如果這條語(yǔ)句是回傳語(yǔ)句,省略了大括號(hào)後也要把return關(guān)鍵字省略)

#三、函數(shù)引用

lambda表達(dá)式是為了簡(jiǎn)化介面。在lambda表達(dá)式中,不應(yīng)該出現(xiàn)比較複雜的邏輯。如果需要處理的邏輯比較複雜,一般情況會(huì)單獨(dú)寫一個(gè)方法。在lambda表達(dá)式中直接引用這個(gè)方法即可。即引用一個(gè)已經(jīng)存在的方法,使其取代lambda表達(dá)式完成介面的實(shí)作。

1.靜態(tài)方法參考

#語(yǔ)法:類別::靜態(tài)方法

  • 在引用的方法後面,不要加上小括號(hào)。
引用的這個(gè)方法,參數(shù)(數(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.非靜態(tài)方法參考

#語(yǔ)法:

物件::非靜態(tài)方法
  • 在引用的方法後面,不要加上小括號(hào)。
引用的這個(gè)方法,參數(shù)(數(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)方法參考

#語(yǔ)法:

類別名稱::new

#可以透過(guò)介面中的方法的參數(shù),區(qū)分引用不同的建構(gòu)方法。

如果某一個(gè)函數(shù)式介面中定義的方法,只是為了得到一個(gè)類別的物件。此時(shí)就可以使用構(gòu)造方法的引用,簡(jiǎn)化這個(gè)方法的實(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類的無(wú)參構(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類的兩個(gè)參數(shù)的構(gòu)造方法執(zhí)行了");
????????}
????}

????public?static?void?main(String[]?args)?{
????????//?1.使用lambda表達(dá)式,實(shí)現(xiàn)GetPersonWithNoneParameter接口
????????GetPersonWithNoneParameter?getPerson?=?Person::new;
????????//?2.使用lambda表達(dá)式,實(shí)現(xiàn)GetPersonWithSingleParameter接口
????????GetPersonWithSingleParameter?getPerson2?=?Person::new;
????????//?3.使用lambda表達(dá)式,實(shí)現(xiàn)GetPersonWithMutipleParameter接口
????????GetPersonWithMutipleParameter?getPerson3?=?Person::new;

????????System.out.println(getPerson.get());
????????System.out.println(getPerson2.get("樹先生"));
????????System.out.println(getPerson3.get("你好",?23));
????}}

4.物件方法的特殊參考#使用lambda表達(dá)式實(shí)作某些介面時(shí),如果lambda表達(dá)式中包含了某一個(gè)對(duì)象,此時(shí)方法體中,直接使用這個(gè)物件呼叫它的某一個(gè)方法就可以完成整體的邏輯。

/**
?*?@Description:?對(duì)象方法的特殊應(yīng)用
?*?@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("小明");//????????邏輯實(shí)現(xiàn)只是為了獲取到對(duì)象的名字//????????MyInterface?lambda2?=?Person::getName;//????????System.out.println(lambda2.get(p1));
????????
????????//?邏輯實(shí)現(xiàn)只是為了給對(duì)象的某些屬性進(jìn)行賦值
????????MyInterface?lambda1?=?(x,?n)?->?x.setName(n);
????????MyInterface?lambda2?=?Person::setName;
????????lambda2.set(p1,?"李華");
????????System.out.println(p1.getName());
????}}
四、Lambda表達(dá)式需要注意的問(wèn)題############如果用到###局部變數(shù)###,預(yù)設(shè)會(huì)被聲明為常量,不能發(fā)生值的改變。 ######
/**
?*?@Description:
?*?@author?Guoqianliang
?*?@date?13:05?-?2021/2/16
?*/public?class?Lambda4?{
????public?static?void?main(String[]?args)?{
????????//?1.定義一個(gè)局部變量
????????int?x?=?10;
????????//?2.使用lambda表達(dá)式實(shí)現(xiàn)接口
????????LambdaTest?lambda?=?()?->?{
????????????System.out.println("x="?+?x);
????????};
????????//?3.?無(wú)法修改常量x
????????//?x=20;
????}}@FunctionalInterfaceinterface?LambdaTest?{
????void?test();}
#########相關(guān)學(xué)習(xí)推薦:##########java基礎(chǔ)############

以上是介紹Java8語(yǔ)法糖之Lambda表達(dá)式的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

lambda 表達(dá)式在 C++ 中如何處理異常? lambda 表達(dá)式在 C++ 中如何處理異常? Apr 17, 2024 pm 12:42 PM

在C++中,使用Lambda表達(dá)式處理異常有兩種方法:使用try-catch區(qū)塊捕獲異常,並在catch區(qū)塊中處理或重新拋出異常。使用std::function類型的包裝函數(shù),其try_emplace方法可以捕獲Lambda表達(dá)式中的異常。

C++ lambda 表達(dá)式中閉包的意思是什麼? C++ lambda 表達(dá)式中閉包的意思是什麼? Apr 17, 2024 pm 06:15 PM

在C++中,閉包是能夠存取外部變數(shù)的lambda表達(dá)式。若要建立閉包,請(qǐng)擷取lambda表達(dá)式中的外部變數(shù)。閉包提供可重複使用性、資訊隱藏和延遲求值等優(yōu)點(diǎn)。它們?cè)谑录幚沓绦虻葘?shí)際情況中很有用,其中即使外部變數(shù)被銷毀,閉包仍然可以存取它們。

用 C++ lambda 表達(dá)式實(shí)作多執(zhí)行緒程式設(shè)計(jì)的優(yōu)點(diǎn)是什麼? 用 C++ lambda 表達(dá)式實(shí)作多執(zhí)行緒程式設(shè)計(jì)的優(yōu)點(diǎn)是什麼? Apr 17, 2024 pm 05:24 PM

lambda表達(dá)式在C++多執(zhí)行緒程式設(shè)計(jì)中的優(yōu)點(diǎn)包括:簡(jiǎn)潔性、靈活性、易於傳參和並行性。實(shí)戰(zhàn)案例:使用lambda表達(dá)式建立多執(zhí)行緒,在不同執(zhí)行緒中列印執(zhí)行緒ID,展示了該方法的簡(jiǎn)潔和易用性。

Java 8中如何計(jì)算一年前或一年後的日期? Java 8中如何計(jì)算一年前或一年後的日期? Apr 26, 2023 am 09:22 AM

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

C++ Lambda 表達(dá)式如何實(shí)作閉包? C++ Lambda 表達(dá)式如何實(shí)作閉包? Jun 01, 2024 pm 05:50 PM

C++Lambda表達(dá)式支援閉包,即保存函數(shù)作用域變數(shù)並供函數(shù)存取。語(yǔ)法為[capture-list](parameters)->return-type{function-body}。 capture-list定義要捕獲的變量,可以使用[=]按值捕獲所有局部變量,[&]按引用捕獲所有局部變量,或[variable1,variable2,...]捕獲特定變量。 Lambda表達(dá)式只能存取捕獲的變量,但無(wú)法修改原始值。

C++ 函式呼叫 Lambda 表達(dá)式:參數(shù)傳遞與傳回值的回呼最佳化 C++ 函式呼叫 Lambda 表達(dá)式:參數(shù)傳遞與傳回值的回呼最佳化 May 03, 2024 pm 12:12 PM

在C++中,可以使用Lambda表達(dá)式作為函數(shù)參數(shù),實(shí)現(xiàn)回呼函數(shù)的靈活性。具體而言:參數(shù)傳遞:透過(guò)std::function包裝Lambda表達(dá)式,以函數(shù)指標(biāo)形式傳遞給函數(shù)。傳回值處理:使用std::function宣告回呼函數(shù)指標(biāo)時(shí)指定傳回值類型。實(shí)戰(zhàn)案例:優(yōu)化GUI事件處理中的回調(diào),避免創(chuàng)建不必要的物件或函數(shù)指針,提高程式碼簡(jiǎn)潔性和可維護(hù)性。

C++ lambda 表達(dá)式如何捕捉外部變數(shù)? C++ lambda 表達(dá)式如何捕捉外部變數(shù)? Apr 17, 2024 pm 04:39 PM

在C++中捕捉外部變數(shù)的lambda表達(dá)式有三種方法:按值擷?。航⒁粋€(gè)變數(shù)副本。按引用擷取:獲得變數(shù)引用。同時(shí)按值和引用捕獲:允許捕獲多個(gè)變量,按值或按引用。

如何使用 C++ lambda 表達(dá)式執(zhí)行延遲求值? 如何使用 C++ lambda 表達(dá)式執(zhí)行延遲求值? Apr 17, 2024 pm 12:36 PM

如何使用C++lambda表達(dá)式執(zhí)行延遲求值?使用lambda表達(dá)式建立延遲求值的函數(shù)物件。延遲計(jì)算推遲到需要時(shí)才執(zhí)行。僅當(dāng)需要時(shí)才計(jì)算結(jié)果,提高效能。

See all articles