java 簡(jiǎn)潔代碼
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評(píng)論(0)
函數(shù)式編程
函數(shù)式編程將函數(shù)作為程序開發(fā)人員的核心結(jié)構(gòu)。開發(fā)人員可以以一種非常靈活的方式使用函數(shù),例如將其作為參數(shù)傳遞。利用Lambda表達(dá)式的這種能力,Java可以將函數(shù)作為方法的參數(shù),或者將代碼作為數(shù)據(jù)。Lambda表達(dá)式可以看作是一個(gè)與任何特定的類都無(wú)關(guān)的匿名方法。這些理念有著非常豐富多彩并且引人入勝的數(shù)學(xué)基礎(chǔ)。
函數(shù)式編程和Lambda表達(dá)式仍然是比較抽象、深?yuàn)W的概念。對(duì)于開發(fā)人員來(lái)說,主要關(guān)注如何解決實(shí)際生產(chǎn)中的任務(wù),對(duì)于跟蹤最新的計(jì)算趨勢(shì)可能并不感興趣。隨著Lambda表達(dá)式在Java中的引入,對(duì)于開發(fā)人員來(lái)說對(duì)這些新特性的了解至少需要能夠達(dá)到可以讀懂其他開發(fā)人員所編寫代碼的程度。這些新特性還能帶來(lái)實(shí)際的好處——可以影響并發(fā)系統(tǒng)的設(shè)計(jì),使其擁有更優(yōu)的性能。而本文所關(guān)心的是如何利用這些機(jī)制編寫簡(jiǎn)潔而又清晰的代碼。
之所以能夠用Lambda表達(dá)式生成簡(jiǎn)潔的代碼,有如下幾個(gè)原因。局部變量的使用量減少,因此聲明和賦值的代碼也隨之減少。循環(huán)被方法調(diào)用所替代,從而將三行以上的代碼縮減為一行。本來(lái)在嵌套循環(huán)和條件語(yǔ)句中的代碼現(xiàn)在可以放置于一個(gè)單獨(dú)的方法中。實(shí)現(xiàn)連貫接口,可以將方法以類似于Unix管道的方式鏈接在一起。以函數(shù)式的風(fēng)格編寫代碼的凈效應(yīng)并不只限于可讀性。此類代碼可以避免狀態(tài)維護(hù)并且不會(huì)產(chǎn)生副作用。這種代碼還能夠產(chǎn)生易于并行化,提高處理效率的額外收益。
Lambda表達(dá)式
與Lambda表達(dá)式相關(guān)的語(yǔ)法比較簡(jiǎn)單直白,不過又有別于Java之前版本的習(xí)語(yǔ)。一個(gè)Lambda表達(dá)式由三部分組成,參數(shù)列表、箭頭和主體。參數(shù)列表可以包含也可以不包含括號(hào)。此外還新增了由雙冒號(hào)組成的相關(guān)操作符,可以進(jìn)一步縮減某些特定的Lambda表達(dá)式所需的代碼量。這又稱為方法引用。
線程創(chuàng)建
在這個(gè)示例中,將會(huì)創(chuàng)建并運(yùn)行一個(gè)線程。Lambda表達(dá)式出現(xiàn)在賦值操作符的右側(cè),指定了一個(gè)空的參數(shù)列表,以及當(dāng)線程運(yùn)行時(shí)寫到標(biāo)準(zhǔn)輸出的簡(jiǎn)單的消息輸出。
Runnable r1= () -》 System .out.print( “Hi!”) ;r1.run()
處理集合
Lambda表達(dá)式的出現(xiàn)會(huì)被開發(fā)人員注意到的首要位置之一就是與集合API相關(guān)。假設(shè)我們需要將一個(gè)字符串列表根據(jù)長(zhǎng)度排序。
java .util.List《String》 l ;l= java .util.Arrays.asList(new String[]{ “aaa”, “b”, “cccc”, “DD”}) ;
可以創(chuàng)建一個(gè)Lambda表達(dá)式實(shí)現(xiàn)此功能。
java.util.Collections.sort (l, (s1, s2) -》 newInteger(s1.length())。 compareTo(s2.length())
這個(gè)示例中包含兩個(gè)傳遞給Lambda表達(dá)式體的參數(shù),以比較這兩個(gè)參數(shù)的長(zhǎng)度。
除此之外還有許多替代方案,在無(wú)需使用標(biāo)準(zhǔn)的“for”或“while”循環(huán)的前提下,就可以操作列表中的各個(gè)元素。通過向集合的“forEach”方法傳入Lambda表達(dá)式也可以完成用于比較的語(yǔ)義。這種情況下,只有一個(gè)參數(shù)傳入,也就無(wú)需使用括號(hào)。
l .forEach(e -》 System .out.println(e)) ;
這個(gè)特殊的示例還可以通過使用方法引用將包含類和靜態(tài)方法分開的方式進(jìn)一步減少代碼量。每個(gè)元素都會(huì)按順序傳入println方法。
非常好我支持^.^
(0) 0%
不好我反對(duì)
(0) 0%