Lambda表示式的用法

2021-10-05 19:35:33 字數 3458 閱讀 8442

1 函式式程式設計思想概述

在數學中,函式就是有輸入量、輸出量的一套計算方案,也就是「拿什麼東西做什麼事情」。相對而言,物件導向過分強調「必須通過物件的形式來做事情」,而函式式思想則盡量忽略物件導向的複雜語法——強調做什麼,而不是以什麼形式做

2 lambda標準格式

lambda省去物件導向的條條框框,格式由3個部分組成:

lambda表示式的標準格式為:

(引數型別 引數名稱) ->
格式說明:

3 lambda表示式與匿名內部類的比較

一方面,匿名內部類可以省去實現類的定義;另一方面,匿名內部類的語法——複雜!

同樣的語義體現在lambda語法中,要更加簡單

例1:

需求:使用陣列儲存多個person物件

對陣列中的person物件用arrays中的sort進行年齡公升序排列

person類:

public

class

person

public

person

(string name,

int age)

@override

public string tostring()

';}public string getname()

public

void

setname

(string name)

public

intgetage()

public

void

setage

(int age)

}

測試類:

public

class

lambdaperson

;for

(person ar:array)

system.out.

println

("--------------");

//對陣列中的person物件用arrays中的sort進行年齡公升序排列

arrays.

sort

(array,

newcomparator

()})

;for

(person ar:array)

system.out.

println

("-----------------------------");

//使用lambda表示式

arrays.

sort

(array,

(person p1,person p2)

->);

for(person ar:array)

}}

例2:
給定cook介面,內含唯一的抽象方法makefood,且無引數、無返回值。

使用lambda的**標準格式**呼叫invokecook方法,列印輸出「make food」字樣

cook介面:

public

inte***ce

cook

測試類:

public

class

lambda01})

;//使用lambda表示式,簡化匿名內部類的書寫

method((

)->);

}//定義乙個方法,引數傳遞cook

public

static

void

method

(cook cook)

}

例3:
給定乙個計算器calculator介面,內含抽象方法calc可以將兩個int數字

相加得到和值

calculator介面:

public

inte***ce

calculator

測試類:

public

class

lambdacalculator})

; system.out.

println

("-----------------------------");

//lambda表示式方法

invokecalc

(120

,130,(

int a,

int b)

->);

}public

static

void

invokecalc

(int a,

int b,calculator calculator)

}

4 lambda省略格式

可推導即可省略

lambda強調的是「做什麼」而不是「怎麼做」,所以凡是可以根據上下文推導得知的資訊,都可以省略。例如上例還可以使用lambda的省略寫法:

invokecalc

(120

,130,(

int a,

int b)

->

);

省略寫法:

invokecalc

(120

,130

,(a, b)

-> a + b)

;

省略規則

在lambda標準格式的基礎上,使用省略寫法的規則為:

小括號內引數的型別可以省略;

如果小括號內有且僅有乙個參,則小括號可以省略;

如果大括號內有且僅有乙個語句,則無論是否有返回值,都可以省略大括號、return關鍵字及語句分號。

5 lambda的使用前提

lambda的語法非常簡潔,完全沒有物件導向複雜的束縛。但是使用時有幾個問題需要特別注意:

使用lambda必須具有介面,且要求介面中有且僅有乙個抽象方法

無論是jdk內建的runnablecomparator介面還是自定義的介面,只有當介面中的抽象方法存在且唯一時,才可以使用lambda。

使用lambda必須具有上下文推斷

也就是方法的引數或區域性變數型別必須為lambda對應的介面型別,才能使用lambda作為該介面的例項。

備註:有且僅有乙個抽象方法的介面,稱為「函式式介面」。

lambda表示式用法

lambda 表示式實際上是乙個函式,只是它沒有名字,叫匿名函式。c 11新增了lambda函式,其基本格式如下 捕捉列表 引數 mutable 返回值型別一 c 中使用lambda 捕捉列表 也叫 外部變數訪問方式說明符 可以是 或 表示 中用到的 定義在 外面的變數在 中是否允許被改變。表示不允...

Lambda表示式用法

c 2.0的匿名方法允許我們以內聯的方式來實現委 託例項,而c 3.0的lambda表示式允許我們使用一 種更接近人的思維 更自然的方式來實現類似於匿 名方法同樣的效果。lambda表示式格式為 引數列表 表示式或者語句塊 可以有多個引數,乙個引數,或者無引數。引數型別 可以隱式或者顯式。例如 x,...

lambda表示式 lambda表示式

1.概述 c 11 中的 lambda 表示式用於定義並建立匿名的函式物件,以簡化程式設計工作。lambda 的語法形式如下 函式物件引數 操作符過載函式引數 mutable 或 exception 宣告 返回值型別可以看到,lambda 主要分為五個部分 函式物件引數 操作符過載函式引數 muta...