針對(duì)上篇博客Java8函數(shù)式編程之一: 行為參數(shù)化 - 簡(jiǎn)書(shū)?最后留下的問(wèn)題哲泊,也就是java8怎樣解決匿名內(nèi)部類(lèi)代碼難看疤祭,臃腫的的問(wèn)題湾揽,我們先來(lái)看一下解決方法旅挤,使用Lambda表達(dá)式:
//使用匿名內(nèi)部類(lè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()));
——————————————————————————
有沒(méi)有覺(jué)得很神奇踢关,只要一行代碼就可以代替上面 那么多行代碼。即使現(xiàn)在你覺(jué)得疑惑也沒(méi)有關(guān)系粘茄,我們先看一個(gè)Wiki對(duì)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ù):它沒(méi)有名稱(chēng)柒瓣,但是有參數(shù)列表儒搭,函數(shù)主體,返回類(lèi)型芙贫。
Java Lambda表達(dá)式是一種匿名函數(shù)搂鲫;它是沒(méi)有聲明的方法,即沒(méi)有訪問(wèn)修飾符磺平,返回值聲明和名字魂仍。
————————
Lambda表達(dá)式的作用:
1.傳遞行為拐辽,而不僅僅是值
2.提升抽象層次
3.API重用性更好
4.更加靈活
————
像(Trade trade) ->"America".equals(trade.getCountry()) 一樣,Lambda分為三部分:
1.參數(shù)列表 - 比如trade就是一個(gè)參數(shù)列表
2.箭頭操作符 - 把參數(shù)列表與Lanbda主體分隔開(kāi)
3.Lambda主體 ?-"America".equals(trade.getCountry()
——————————————————
1.一個(gè)Lambda表達(dá)式可以有0個(gè)或者多個(gè)參數(shù)擦酌;
2.參數(shù)的類(lèi)型既可以明確聲明薛训,也可以根據(jù)上下文來(lái)推斷。比如:(int a) 與(a) 效果相同仑氛。
3.所有參數(shù)需要包含在圓括號(hào)內(nèi)乙埃,參數(shù)之間用逗號(hào)隔開(kāi)。比如: (a,b) ?或者 (int a, int b)或者 (String a, int b, float c)
4.空?qǐng)A括號(hào)代表參數(shù)集為空锯岖。比如: () -> 42
5.當(dāng)只有一個(gè)參數(shù)介袜,并且類(lèi)型可以推導(dǎo)時(shí),圓括號(hào)()可以省略出吹。比如: a -> return a * a
6.Lambda表達(dá)式的主體可以包含0條或者多條語(yǔ)句
7.如果Lambda表達(dá)式的主體只有一條語(yǔ)句遇伞,花括號(hào){}可以省略。匿名函數(shù)的返回類(lèi)型與該主體表達(dá)式一致捶牢。
8.如果Lambda表達(dá)式的主體包含一條以上語(yǔ)句鸠珠,則表達(dá)式必須包含在花括號(hào)中。
——————
Lambda表達(dá)式的語(yǔ)法格式是:
(parameters ) ?-> { expression} ? 或者 ?(parameters) -> {statements}
Lambda表達(dá)式的使用實(shí)例:
布爾表達(dá)式 : (List ?list) ?-> list.isEmpty()
創(chuàng)建對(duì)象 : () -> new Apple(10)
消費(fèi)一個(gè)對(duì)象:(Trade trade) ?-> {System.out.println(trade.getMoney())}
從一個(gè)對(duì)象中選擇:(String s) -> s.length()
組合兩個(gè)值 : (int a, int b) -> a * b
比較兩個(gè)對(duì)象 : (Trade trade1,Trade trade2) -> trade1.getMoney().compareTo(trade2.getMoney())
————————————————————
好了秋麸,這就是Lambda表達(dá)式的介紹渐排,如果你還是不熟悉,不用擔(dān)心灸蟆,后面我們會(huì)大量的使用Lambda表達(dá)式驯耻,熟能生巧!
你是否有疑問(wèn)炒考,Lambda表達(dá)式在哪里使用呢以及如何使用呢可缚?
答案是在函數(shù)式接口上使用Lambda表達(dá)式。哈哈斋枢,你肯定還會(huì)繼續(xù)問(wèn):什么是函數(shù)式接口呢帘靡?
要了解這個(gè)問(wèn)題,請(qǐng)看下一篇博客Java8函數(shù)式編程之三:函數(shù)式接口 - 簡(jiǎn)書(shū)?瓤帚。