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內建的runnable
、comparator
介面還是自定義的介面,只有當介面中的抽象方法存在且唯一時,才可以使用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...