jdk8的新特性之lambda表示式

2021-10-06 19:00:58 字數 2276 閱讀 1969

在學習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,需要注意的是 引數可以為空 引數為乙個值得時候,...