在學習lambda表示式之前,我們先得到了解乙個知識點叫做函式式介面
只有乙個抽象方法的介面,叫函式式介面,它是lamdba表示式的使用前提。
在學習多執行緒的時候runnable介面
就是乙個函式式介面,如下
public
inte***ce
runnable
在學習collections工具類的的[sort](chapter5\5.2 collections.html#方法演示 )方法時,我們講到comparator介面用於可以用於排序。
public
inte***ce
comparator
lambda表示式可以用來解決匿名內部類**冗餘的問題,先來看一下匿名內部類的冗餘問題。
public
static
void
main
(string[
] args)}}
).start()
;}
觀察上面**,我們發現建立執行緒物件時,需要傳遞乙個runnable介面
的實現類。而runnable介面
的實現類又必須複寫run方法。那麼問題來了,仔細想想是不是這樣,既然只乙個run方法,並且又必須複寫run方法,倒不如不寫這些**,讓編譯器自動推導!!!
lambda表示式就能解決上面匿名內部類**冗餘的問題,其實只是省略了匿名內部類的一些**,所以有人說lambda表示式是乙個語法糖。
所以**就程式設計這個樣子
public
static
void
main
(string[
] args)})
.start()
;}
lambda表示式的格式有標準格式和好幾種預設格式。如下
1. 標準格式:
(type1 param1,type2 param2)
->
2. 編譯器都可以推斷出lambda表示式的引數型別,所以引數型別可以省略
(param1,param2)
->
3. 當lambda表示式的引數個數只有乙個,可以省略小括號
param-
>
4. 當lambda表示式只包含一條語句時,可以省略大括號、return和語句結尾的分號`;`
param-
>語句體
當方法的引數是函式式介面時,在呼叫該方法時,就可以直接傳遞lamdba作為引數。這也叫函式式程式設計。
//有乙個函式式介面
public
inte***ce
mathoperation
//方法的引數是mathoperation介面
public
static
void
test
(mathoperation op)
呼叫以上test方法時傳遞lamdba表示式作為mathoperation介面的例項實現
//測試類
public
class
test1})
;//使用lambda表示式,作為mathoperation介面的例項
test((
int a,
int b)
->);
//使用lambda預設格式,作為mathoperation介面的例項
test
((a,b)
->a+b);}
}
/*
有乙個陣列,對數字公升序降序排列
*/public
class
test1
;//sort方法第二個引數是乙個comparator介面,使用lambda表示式作為例項介面。
arrays.
sort
(arr,
(o1, o2)
-> o2-o1);}
}
ladmba總結
lamdba表示式可以簡化匿名內部類的書寫,提高編寫**的效率,也是函式式程式設計的重要體現。
JDK8新特性之Lambda表示式
lambda表示式主要是替換了原有匿名內部類的寫法,也就是簡化了匿名內部類的寫法。lambda語法結構 引數1,引數2.先看乙個使用匿名內部類定義乙個新執行緒的方法 test public void test1 start for int x 0 x 100 x 使用lambda表示式則可以簡化匿名...
JDK8新特性之Lambda表示式
j a 8的乙個大亮點是引入lambda表示式,使用它設計的 會更加簡潔。當開發者在編寫lambda表示式時,也會隨之被編譯成乙個函式式介面。一行執行語句的寫法 parameters expression如果有多行執行語句,可以加上 parameters 如 public intadd int x,...
JDK8的新特性
這兩天開始看jdk8的新特性,先看了lembda表示式和stream,就乙個感覺,優雅。趕緊將這兩天的成果總結一下 lembda表示式是乙個簡潔 可傳遞的匿名函式,實現了把 塊賦值給乙個變數的功能 格式就是 parameters expression,需要注意的是 引數可以為空 引數為乙個值得時候,...