讀古今文學網 > Java 8實戰 > 關於本書 >

關於本書

簡單地說,Java 8中的新增功能是自Java 1.0發佈18年以來,Java發生的最大變化。沒有去掉任何東西,因此你現有的Java代碼都能工作,但新功能提供了強大的新語彙和新設計模式,能幫助你編寫更清楚、更簡潔的代碼。就像遇到所有新功能時那樣,你一開始可能會想:“為什麼又要去改我的語言呢?”但稍加練習之後,你就會發覺自己只用預期的一半時間,就用新功能寫出了更短、更清晰的代碼,這時你會意識到自己永遠無法返回到“舊Java”了。

本書會幫助你跨過“原理聽起來不錯,但還是有點兒新,不太適應”的門檻,從而熟練地進行編程。

“也許吧,”你可能會想,“可是Lambda、函數式編程,這些不是那些留著鬍子、穿著涼鞋的學究們在象牙塔裡面琢磨的東西嗎?”或許是的,但Java 8中加入的新想法的份量剛剛好,它們帶來的好處也可以被普通的Java程序員所理解。本書會從普通程序員的角度來敘述,偶爾談談“這是怎麼來的”。

“Lambda,聽起來跟天書一樣!”是的,也許是這樣,但它是一個很好的想法,讓你可以編寫簡明的Java程序。許多人都熟悉事件處理器和回調函數,即註冊一個對象,它包含會在事件發生時使用的一個方法。Lambda使人更容易在Java中廣泛應用這種思想。簡單來說,Lambda和它的朋友“方法引用”讓你在做其他事情的過程中,可以簡明地將代碼或方法作為參數傳遞進去執行。在本書中,你會看到這種思想出現得比預想的還要頻繁:從加入作比較的代碼來簡單地參數化一個排序方法,到利用新的Stream API在一組數據上表達複雜的查詢指令。

“流(stream)是什麼?”這是Java 8的一個新功能。它們的特點和集合(collection)差不多,但有幾個明顯的優點,讓我們可以使用新的編程風格。首先,如果你使用過SQL等數據庫查詢語言,就會發現用幾行代碼寫出的查詢語句要是換成Java要寫好長。Java 8的流支持這種簡明的數據庫查詢式編程——但用的是Java語法,而無需瞭解數據庫!其次,流被設計成無需同時將所有的數據調入內存(甚至根本無需計算),這樣就可以處理無法裝入計算機內存的流數據了。但Java 8可以對流做一些集合所不能的優化操作,例如,它可以將對同一個流的若干操作組合起來,從而只遍歷一次數據,而不是花很大代價去多次遍歷它。更妙的是,Java可以自動將流操作並行化(集合可不行)。

“還有函數式編程,這又是什麼?”就像面向對像編程一樣,它是另一種編程風格,其核心是把函數作為值,前面在討論Lambda的時候提到過。

Java 8的好處在於,它把函數式編程中一些最好的想法融入到了大家熟悉的Java語法中。有了這個優秀的設計選擇,你可以把函數式編程看作Java 8中一個額外的設計模式和語彙,讓你可以用更少的時間,編寫更清楚、更簡潔的代碼。想想你的編程兵器庫中的利器又多了一樣。

當然,除了這些在概念上對Java有很大擴充的功能,我們也會解釋很多其他有用的Java 8功能和更新,如默認方法、新的Optional類、CompletableFuture,以及新的日期和時間API。

別急,這只是一個概覽,現在該讓你自己去看看本書了。

本書結構

本書分為四個部分:“基礎知識”“函數式數據處理”“高效Java 8編程”和“超越Java 8”。我們強烈建議你按順序閱讀,因為很多概念都需要前面的章節作為基礎。大多數章節都有幾個小測驗,幫助你學習和掌握這些內容。

第一部分包括3章,旨在幫助你初步使用Java 8。學完這一部分,你將會對Lambda表達式有充分的瞭解,並可以編寫簡潔而靈活的代碼,能夠輕鬆適應不斷變化的需求。

  • 在第1章中,我們總結了Java的主要變化(Lambda表達式、方法引用、流和默認方法),並為學習後面的內容做好準備。

  • 在第2章中,你將瞭解行為參數化,這是Java 8非常依賴的一種軟件開發模式,也是引入Lambda表達式的主要原因。

  • 第3章全面地解釋了Lambda表達式和方法引用,每一步都有代碼示例和測驗。

第二部分仔細討論了新的Stream API。學完這一部分,你將充分理解流是什麼,以及如何在Java應用程序中使用它們來簡潔而高效地處理數據集。

  • 第4章介紹了流的概念,並解釋它們與集合有何異同。

  • 第5章詳細討論了表達複雜數據處理查詢可以使用的流操作。我們會談到很多模式,如篩選、切片、查找、匹配、映射和歸約。

  • 第6章講到了收集器——Stream API的一個功能,可以讓你表達更為複雜的數據處理查詢。

  • 在第7章中,你將瞭解流如何得以自動並行執行,並利用多核架構的優勢。此外,你還會學到為正確而高效地使用並行流,要避免的若干陷阱。

第三部分探討了能讓你高效使用Java 8並在代碼中運用現代語彙的若干內容。

  • 第8章探討了如何利用Java 8的新功能和一些秘訣來改善你現有的代碼。此外,該章還探討了一些重要的軟件開發技術,如設計模式、重構、測試和調試。

  • 在第9章中,你將瞭解到默認方法是什麼,如何利用它們來以兼容的方式演變API,一些實際的應用模式,以及有效使用默認方法的規則。

  • 第10章談到了新的java.util.Optional類,它能讓你設計出更好的API,並減少空指針異常。

  • 第11章探討了CompletableFuture,它可以讓你用聲明性方式表達複雜的異步計算,從而讓Stream API的設計並行化。

  • 第12章探討了新的日期和時間API,這相對於以前涉及日期和時間時容易出錯的API是一大改進。

在本書最後一部分,我們會返回來談談怎麼用Java編寫高效的函數式程序,還會將Java 8的功能和Scala作一比較。

  • 第13章是一個完整的函數式編程教程,介紹了一些術語,並解釋了如何在Java 8中編寫函數式風格的程序。

  • 第14章涵蓋了更高級的函數式編程技巧,包括高階函數、科裡化、持久化數據結構、延遲列表和模式匹配。你可以把這一章看作一種融合,既有可以用在代碼庫中的實際技術,也有讓你成為更淵博的程序員的學術知識。

  • 第15章對比了Java 8的功能與Scala的功能。Scala和Java一樣,是一種實施在JVM上的語言,近年來迅速發展,在編程語言生態系統中已經威脅到了Java的一些方面。

  • 在第16章我們會回顧這段學習Java 8並慢慢走向函數式編程的歷程。此外,我們還會猜測,在Java 8之後,未來可能還有哪些增強和新功能出現。

最後,本書有四個附錄,涵蓋了與Java 8相關的其他一些話題。附錄A總結了本書未討論的一些Java 8的小特性。附錄B概述了Java庫的其他主要擴展,可能對你有用。附錄C是第二部分的延續,談到了流的高級用法。附錄D探討了Java編譯器在幕後是如何實現Lambda表達式的。

代碼慣例和下載

所有代碼清單和正文中的源代碼都採用等寬字體(如fixed-widthfontlikethis),以與普通文字區分開來。許多代碼清單中都有註釋,突出了重要的概念。

書中所有示例代碼和執行說明均可見於https://github.com/java8/Java8InAction。你也可以從出版商網站(https://www.manning.com/java8inaction)下載包含本書所有示例的zip文件。

作者在線

購買本書即可免費訪問Manning Publications運營的一個私有在線論壇,你可以在那裡發表關於本書的評論、詢問技術問題,並獲得作者和其他用戶的幫助。如欲訪問作者在線論壇並訂閱,請用瀏覽器訪問https://www.manning.com/java8inaction。這個頁面說明了註冊後如何使用論壇,能獲得什麼類型的幫助,以及論壇上的行為守則。

Manning對讀者的承諾是提供一個平台,供讀者之間以及讀者和作者之間進行有意義的對話。但這並不意味著作者會有任何特定程度的參與。他們對論壇的貢獻是完全自願的(且無報酬)。我們建議你試著詢問作者一些有挑戰性的問題,以免他們失去興趣!

只要本書仍在印,你就可以在出版商網站上訪問作者在線論壇和先前所討論內容的歸檔文件。