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