Java8函數(shù)式編程之二 : Lambda表達(dá)式

針對上篇博客Java8函數(shù)式編程之一: 行為參數(shù)化 - 簡書?最后留下的問題,也就是java8怎樣解決匿名內(nèi)部類代碼難看,臃腫的的問題,我們先來看一下解決方法,使用Lambda表達(dá)式:

//使用匿名內(nèi)部類

List tradeInAmerica =filterTrade(trades,newTradePredicate() {

@Override

public booleantest(Trade trade) {

return"America".equals(trade.getCountry());

}

});

//使用Lambda表達(dá)式

List list =filterTrade(trades,(Trade trade) ->"America".equals(trade.getCountry()));

——————————————————————————

有沒有覺得很神奇,只要一行代碼就可以代替上面 那么多行代碼。即使現(xiàn)在你覺得疑惑也沒有關(guān)系,我們先看一個(gè)Wiki對Lambda的定義:

lambda expression in computer programming, also calledanonymous function, a function (or a subroutine) defined, and possibly called, without being bound to an identifier

相信你看懂了幾個(gè)重要的單詞:操作符,匿名函數(shù)。

Lambda表達(dá)式可以理解為一種匿名函數(shù):它沒有名稱,但是有參數(shù)列表,函數(shù)主體,返回類型。

Java Lambda表達(dá)式是一種匿名函數(shù);它是沒有聲明的方法,即沒有訪問修飾符,返回值聲明和名字。

————————

Lambda表達(dá)式的作用:

1.傳遞行為,而不僅僅是值

2.提升抽象層次

3.API重用性更好

4.更加靈活

————

像(Trade trade) ->"America".equals(trade.getCountry()) 一樣,Lambda分為三部分:

1.參數(shù)列表 - 比如trade就是一個(gè)參數(shù)列表

2.箭頭操作符 - 把參數(shù)列表與Lanbda主體分隔開

3.Lambda主體 ?-"America".equals(trade.getCountry()

——————————————————

1.一個(gè)Lambda表達(dá)式可以有0個(gè)或者多個(gè)參數(shù);

2.參數(shù)的類型既可以明確聲明,也可以根據(jù)上下文來推斷。比如:(int a) 與(a) 效果相同。

3.所有參數(shù)需要包含在圓括號(hào)內(nèi),參數(shù)之間用逗號(hào)隔開。比如: (a,b) ?或者 (int a, int b)或者 (String a, int b, float c)

4.空圓括號(hào)代表參數(shù)集為空。比如: () -> 42

5.當(dāng)只有一個(gè)參數(shù),并且類型可以推導(dǎo)時(shí),圓括號(hào)()可以省略。比如: a -> return a * a

6.Lambda表達(dá)式的主體可以包含0條或者多條語句

7.如果Lambda表達(dá)式的主體只有一條語句,花括號(hào){}可以省略。匿名函數(shù)的返回類型與該主體表達(dá)式一致。

8.如果Lambda表達(dá)式的主體包含一條以上語句,則表達(dá)式必須包含在花括號(hào)中。

——————

Lambda表達(dá)式的語法格式是:

(parameters ) ?-> { expression} ? 或者 ?(parameters) -> {statements}

Lambda表達(dá)式的使用實(shí)例:

布爾表達(dá)式 : (List ?list) ?-> list.isEmpty()

創(chuàng)建對象 : () -> new Apple(10)

消費(fèi)一個(gè)對象:(Trade trade) ?-> {System.out.println(trade.getMoney())}

從一個(gè)對象中選擇:(String s) -> s.length()

組合兩個(gè)值 : (int a, int b) -> a * b

比較兩個(gè)對象 : (Trade trade1,Trade trade2) -> trade1.getMoney().compareTo(trade2.getMoney())

————————————————————

好了,這就是Lambda表達(dá)式的介紹,如果你還是不熟悉,不用擔(dān)心,后面我們會(huì)大量的使用Lambda表達(dá)式,熟能生巧!

你是否有疑問,Lambda表達(dá)式在哪里使用呢以及如何使用呢?

答案是在函數(shù)式接口上使用Lambda表達(dá)式。哈哈,你肯定還會(huì)繼續(xù)問:什么是函數(shù)式接口呢?

要了解這個(gè)問題,請看下一篇博客Java8函數(shù)式編程之三:函數(shù)式接口 - 簡書?。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容