jdk8的新特性其實(shí)對(duì)代碼的簡(jiǎn)化開發(fā)還是很大幫助的,如果你能正確的應(yīng)用再自己的代碼里面,可以讓我們開發(fā)的代碼變得很簡(jiǎn)潔整齊。今天我們就一起來(lái)學(xué)習(xí)一下吧。
一.Lambda表達(dá)式
Lambda 允許把函數(shù)作為一個(gè)方法的參數(shù)(函數(shù)作為參數(shù)傳遞進(jìn)方法中)。可以使代碼變的更加簡(jiǎn)潔緊湊?;镜慕Y(jié)構(gòu)是 (參數(shù))->{代碼塊}注意:
?、賲?shù)類型可省略,編譯器可以自己推斷
?、谌绻挥幸粋€(gè)參數(shù),圓括號(hào)可以省略
?、鄞a塊如果只是一行代碼,大括號(hào)也可以省略
?、苋绻a塊是一行,且是有結(jié)果的表達(dá)式,return可以省略
事實(shí)上,把Lambda表達(dá)式可以看做是匿名內(nèi)部類的一種簡(jiǎn)寫方式。當(dāng)然,前提是這個(gè)匿名內(nèi)部類對(duì)應(yīng)的必須是接口,而且接口中必須只有一個(gè)函數(shù)!Lambda表達(dá)式就是直接編寫函數(shù)的:參數(shù)列表、代碼體、返回值等信息,用函數(shù)來(lái)代替完整的匿名內(nèi)部類!
二.接口的默認(rèn)方法和靜態(tài)方法
默認(rèn)方法使得開發(fā)者可以在 不破壞二進(jìn)制兼容性的前提下,往現(xiàn)存接口中添加新的方法,即不強(qiáng)制那些實(shí)現(xiàn)了該接口的類也同時(shí)實(shí)現(xiàn)這個(gè)新加的方法。
默認(rèn)方法和抽象方法之間的區(qū)別在于抽象方法需要實(shí)現(xiàn),而默認(rèn)方法不需要。接口提供的默認(rèn)方法會(huì)被接口的實(shí)現(xiàn)類繼承或者覆寫.
接口里面也可以通過staitc定義默認(rèn)方法。接口里面增加默認(rèn)方法和靜態(tài)方法,可以避免子類里面重復(fù)的復(fù)寫父類公共方法的問題。
三.Streams的操作
即使沒有 Stream API,我們依然能夠通過完成需求,但無(wú)法做到如此簡(jiǎn)潔、清晰。
因此熟悉使用Streams api對(duì)我們代碼簡(jiǎn)化開發(fā)非常重要。
Stream的使用分為兩種類型:
1)Intermediate,一個(gè)Stream可以調(diào)用0到多個(gè)Intermediate類型操作,每次調(diào)用會(huì)對(duì)Stream做一定的處理,返回一個(gè)新的Stream,這類操作都是惰性化的(lazy),就是說(shuō),并沒有真正開始流的遍歷。常用操作:map (mapToInt, flatMap 等)、 filter、 distinctsorted、peek、limit、skip、parallel
2)Terminal一個(gè)Stream只能執(zhí)行一次terminal 操作,而且只能是最后一個(gè)操作,執(zhí)行terminal操作之后,Stream就被消費(fèi)掉了,并且產(chǎn)生一個(gè)結(jié)果。常用操作:forEach、forEachOrdered、toArray、reduce、collect、min、max、count、anyMatch、 allMatch、noneMatch、findFirst、findAny。這些方法的意思都很明了,都是面向函數(shù)式的編程,大家可以下去自己嘗試一下,處理集合數(shù)據(jù)可以方便很多。
咨詢熱線
010-85377344
135-21581588
微信客服
QQ客服
3026106565 點(diǎn)擊咨詢