java lambda::_书评:精通Lambda:多核世界中的Java编程
java lambda::
從版本8開(kāi)始,λ編程(lambda編程)終于在Java世界中引入。此功能將在很大程度上改變Java開(kāi)發(fā)人員的編程方式以及針對(duì)樣板代碼的新“武器”。 Java 8通過(guò)引入新的Stream API,大部分已將函數(shù)式編程應(yīng)用在Collections API中。 此外,此新功能有望使我們輕松進(jìn)入多核世界,而無(wú)需擔(dān)心線程,派生聯(lián)接等問(wèn)題。
將lambda功能集成到傳統(tǒng)的面向?qū)ο蟮木幊陶Z(yǔ)言中一直是一個(gè)挑戰(zhàn),但是Oracle似乎在提供半功能性面向?qū)ο蟮恼Z(yǔ)言方面做得很好,有點(diǎn)夸大了。
關(guān)于Java 8的許多書籍已經(jīng)出版,使Java開(kāi)發(fā)人員的生活更加輕松。 但是,只有少數(shù)幾本書僅涉及Java 8中的λ編程。Maurice的書就是其中之一。
Maurice Naftalin是另一本著名的著作“ Java Generics and Collections ”的作者,并維護(hù)lambda FAQ ,他從中獲得了有關(guān)新λ-API( JSR-335 )的大量經(jīng)驗(yàn)。 長(zhǎng)期經(jīng)驗(yàn)的結(jié)果就是這本有關(guān)Java 8 lambda的新書。
盡管其他有關(guān)該主題的書籍都在描述新API時(shí)提供了簡(jiǎn)單的示例,但Maurice的書籍采用了更為實(shí)用的方式,描述了“使用Lambda表達(dá)式和流的最佳實(shí)踐”。
該書解決了棘手的主題,沒(méi)有像其他書籍一樣提供簡(jiǎn)單的示例來(lái)演示API的用法。 作者試圖利用他解決復(fù)雜問(wèn)題的經(jīng)驗(yàn),以實(shí)用的方式向讀者介紹新的思維方式。
更詳細(xì)地:
在第一章中, Maurice為這些Java 8新功能的推理奠定了基礎(chǔ),并將在他的其余書中進(jìn)行分析:
- 從內(nèi)部到外部迭代
- 從收藏到流
- 從順序到并行
他詳細(xì)介紹了設(shè)計(jì)解決方案背后的原因以及上述主題的選定語(yǔ)法,從而使讀者確信這些更改是多么自然地引入到語(yǔ)言中的。
第2章專門介紹lambda表達(dá)式。 它將lambda與匿名內(nèi)部類進(jìn)行比較,他討論了變量捕獲(也稱為閉包),然后轉(zhuǎn)到函數(shù)接口。 子章節(jié)應(yīng)盡可能簡(jiǎn)潔。 他解釋了靜態(tài) , 綁定和非綁定實(shí)例方法引用之間的區(qū)別(您知道區(qū)別嗎?)并以(函數(shù))類型檢查和重載解析規(guī)則(包括lambda表達(dá)式和方法引用)告終。
那么,為什么在綁定str::replace未綁定String::concat ? 根據(jù)莫里斯(Maurice)的說(shuō)法,綁定方法引用是所謂的,因?yàn)榉椒ㄒ檬请S接收器一起固定的。 所以str::replace等效于(x,y) -> str.replace(x,y) 。 您對(duì)接收器是什么沒(méi)有任何選擇。 它綁定到其receiver (str) 。
在調(diào)用接收器之前,尚未決定未綁定的方法引用。 所以String::concat等效于(receiver,str) -> receiver.concat(str) 。 它期望獲得一個(gè)接收器作為其第一個(gè)參數(shù)。
第3章通過(guò)將流與管道進(jìn)行比較來(lái)介紹流。 他描述了如何啟動(dòng)流(管道),如何對(duì)其進(jìn)行轉(zhuǎn)換(例如,過(guò)濾,映射,排序,截?cái)嗟?#xff09;以及如何結(jié)束它(例如,減少,收集,搜索等)。 他涉及并行和調(diào)試。 他提供了有用且務(wù)實(shí)的例子。
第4章討論如何結(jié)束流,即減少和收集。 他還費(fèi)勁地講解如何編寫自己的收藏家。 一切都通過(guò)圖表說(shuō)明了它們的工作方式以及示例。
第5章討論如何創(chuàng)建流,即源和分離器。 在這里,他介紹了遞歸grep命令的工作示例,并描述了實(shí)現(xiàn)該命令必須解決的錯(cuò)誤。 莫里斯(Maurice)在他的整本書中都沒(méi)有提供解決方案。 通常,在他的推理中,您會(huì)發(fā)現(xiàn)類似以下的語(yǔ)句:“暫時(shí)停止閱讀并考慮此數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)”或“如果尚未解決,請(qǐng)立即停止編寫或概述代碼” 。
第6章介紹流性能。 他使用jmh對(duì)基準(zhǔn)流和并行流,排序,不同,分離器,收集器等進(jìn)行微基準(zhǔn)測(cè)試。并行流并不總是比順序流快,但是它們必須滿足一些條件才能比順序流更好地執(zhí)行。
最后, 第7章討論了接口中的靜態(tài)方法和默認(rèn)方法,以及默認(rèn)方法如何使API得以發(fā)展,同時(shí)保持向后兼容性。 他討論了在哪里使用默認(rèn)方法,并將具有默認(rèn)方法的接口與抽象類進(jìn)行了比較。
他介紹了繼承,提供了??兩個(gè)易于記憶的規(guī)則:
a)“實(shí)例方法的選擇優(yōu)先于默認(rèn)方法”
b)“如果一個(gè)類繼承了多個(gè)競(jìng)爭(zhēng)的默認(rèn)方法,那么將選擇不可覆蓋的默認(rèn)方法。”
本章涵蓋了我所見(jiàn)過(guò)的關(guān)于默認(rèn)和靜態(tài)方法的主題的最完整的介紹。
您應(yīng)該購(gòu)買這本書的五個(gè)原因:
- 小而簡(jiǎn)潔; 就個(gè)人而言,我完成一本175頁(yè)的書(而我做到了)的機(jī)會(huì)要多于一本500或1000頁(yè)的書。
- 作者試圖使您成為功能性程序員的思考。 他沒(méi)有為您提供解決方案。
- 它結(jié)構(gòu)合理,易于找到所需的內(nèi)容
- 這是一本書,您將一遍又一遍
- 它解決了性能問(wèn)題,并提供了有關(guān)性能缺陷和反模式的有用建議。
他們說(shuō):“昂貴的香水裝在小瓶中。” 總而言之,這本小巧實(shí)用的書非常有用,您將在使用Java 8中的新lambda和流API進(jìn)行編程時(shí),一遍又一遍地重訪一本。Maurice的新書應(yīng)該成為每一個(gè)Java的底蘊(yùn)。想了解Java 8中的λ和流的開(kāi)發(fā)人員。
圖書鏈接: 精通Lambda:多核世界中的Java編程
翻譯自: https://www.javacodegeeks.com/2014/12/book-review-mastering-lambdas-java-programming-in-a-multicore-world.html
java lambda::
總結(jié)
以上是生活随笔為你收集整理的java lambda::_书评:精通Lambda:多核世界中的Java编程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux虚拟网卡怎么配置(linux
- 下一篇: jboss fuse 教程_IDC关于使