本書(shū)通過(guò)探討Java開(kāi)發(fā)工作中常會(huì )遇到的問(wèn)題及相關(guān)解決方案,介紹了涉及字符串、數字、數組、集合、數據結構、日期和時(shí)間、對象、不可變性、Switch表達式、類(lèi)型推斷、Java I/O、Java反射、函數式編程、并發(fā)、HTTP Client API和Websocket等方面的核心知識與實(shí)用技巧。 這些簡(jiǎn)單或復雜的問(wèn)題,將幫助你提升解決現實(shí)問(wèn)題的編程能力,使你了解相關(guān)問(wèn)題基于Java 8...
JDK 8到12的版本快速迭代,使得現代Java的學(xué)習曲線(xiàn)變得陡峭,也增加了開(kāi)發(fā)人員進(jìn)入熟練編碼期的時(shí)間成本。然而,這些新的特性和概念,可以用來(lái)解決當下的許多問(wèn)題。本書(shū)將從復雜性、性能、可讀性等方面入手,通過(guò)解釋正確的實(shí)踐和決策,讓你能夠采用客觀(guān)的方法來(lái)解決常見(jiàn)問(wèn)題。 本書(shū)涵蓋了很多主題,如字符串、數字、數組、集合、數據結構、日期和時(shí)間、不可變性、類(lèi)型推斷、Optional、Java I/O、Java反射、函數式編程、并發(fā)和HTTP client API等,共包含1000+示例和300+應用程序。通過(guò)學(xué)習這些內容,你可以提高編程水平,豐富技能工具箱,順利完成各種日常任務(wù)。無(wú)論你的任務(wù)簡(jiǎn)單、中等還是復雜,掌握這些核心知識都是必要的。 閱讀本書(shū)后,你將深刻理解很多Java的概念,并能夠在面對開(kāi)發(fā)問(wèn)題時(shí),設計出最佳的解決方案。 本書(shū)適合誰(shuí) 本書(shū)對于初學(xué)者和中級Java開(kāi)發(fā)人員特別有用。同樣的,書(shū)中深入探討的問(wèn)題也是大部分Java開(kāi)發(fā)者在日常工作中可能會(huì )遇到的難題。 閱讀本書(shū)并不需要過(guò)多的技術(shù)背景,只需你熱愛(ài)Java,并且具備閱讀Java代碼片段的能力。 本書(shū)包含了什么內容 第1章,字符串、數字和數學(xué),我們將探討39個(gè)涉及字符串、數字和數學(xué)運算的問(wèn)題。首先,我們會(huì )研究一些經(jīng)典的字符串問(wèn)題,如統計重復項數量、反轉字符串以及刪除空格等。隨后,我們會(huì )深入探討數字和數學(xué)運算相關(guān)問(wèn)題,例如計算大數之和、處理運算溢出、比較無(wú)符號數,以及計算取整除和模數等。在解決這些問(wèn)題時(shí),我們不僅會(huì )提供多種方法,還將嘗試運用Java 8的函數式編程風(fēng)格。此外,我們還會(huì )討論一些與JDK 9、10、11和12版本相關(guān)的話(huà)題。 第2章,對象、不可變性和Switch表達式,包含18個(gè)涉及對象、不可變性和Switch表達式的問(wèn)題。本章從幾個(gè)處理空引用的問(wèn)題開(kāi)始,然后探討檢查索引、equals()和hashCode()以及不可變性(例如,編寫(xiě)不可變類(lèi),并在不可變類(lèi)中傳遞/返回可變對象)。本章的最后一部分涉及克隆對象和JDK 12的新版Switch表達式。到本章結束時(shí),你將基本了解對象和不可變性。此外,你還將知道如何處理新版的Switch表達式。這些知識對于任何Java開(kāi)發(fā)人員來(lái)說(shuō)都是寶貴且必不可少的。 第3章,處理日期和時(shí)間,我們將探討20個(gè)與日期和時(shí)間相關(guān)的問(wèn)題,包括轉換、格式化、加減、定義周期/持續時(shí)間、計算等方面。在此過(guò)程中,我們會(huì )用到Date、Calendar、LocalDate、LocalTime、LocalDateTime、ZonedDateTime、OffsetDateTime、OffsetTime和Instant等類(lèi)。通過(guò)本章的學(xué)習,你將能夠熟練掌握各種日期和時(shí)間操作,了解相關(guān)API,并能將這些知識整合應用到實(shí)際業(yè)務(wù)需求中。 第4章,類(lèi)型推斷,包含21個(gè)涉及JEP 286或Java局部變量類(lèi)型推斷(LVTI)的問(wèn)題,也稱(chēng)為var類(lèi)型。這些問(wèn)題經(jīng)過(guò)精心設計,以揭示使用var的最佳實(shí)踐和常見(jiàn)錯誤。到本章結束時(shí),你將全面了解var,以便在生產(chǎn)環(huán)境中應用它。 第5章,數組、集合和數據結構,我們將詳細討論與數組、集合和數據結構相關(guān)的30個(gè)問(wèn)題,并提供其解決方案。這些問(wèn)題涵蓋了眾多常見(jiàn)需求,如排序、檢索、比較、反轉、填充、合并、復制及替換等操作。所有的解決方案都是基于Java 8~12版本實(shí)現的。讀完本章后,你將構建起一套完善的知識體系,以便更有效地解決各類(lèi)與數組、集合和數據結構有關(guān)的問(wèn)題。 第6章,Java I/O路徑、文件、緩存、掃描和格式化,包括20個(gè)Java文件I/O相關(guān)的問(wèn)題。通過(guò)操作、輪詢(xún)、監聽(tīng)文件流路徑,以及介紹讀寫(xiě)文本文件/二進(jìn)制文件的有效方式,本章將涵蓋Java開(kāi)發(fā)者日??赡苡龅降慕^大多數I/O相關(guān)問(wèn)題。這些知識將為你解決相關(guān)問(wèn)題提供思路。 第7章,Java反射類(lèi)、接口、構造函數、方法和字段,包括17個(gè)Java反射API的相關(guān)問(wèn)題,從那些經(jīng)典問(wèn)題,如檢查和實(shí)例化Java artifact(模塊、包、類(lèi)、接口、超類(lèi)、構造函數、方法、注解、數組等),到JDK 11引入的合成構造函數和基于嵌套的訪(fǎng)問(wèn)控制,據此提供了對Java反射API的全面介紹??赐瓯菊潞?,Java反射API在你面前將再無(wú)任何秘密,你可以給你的同事秀下反射都可以做什么。 第8章,函數式編程:基礎與設計模式,包括11個(gè)和Java函數式編程相關(guān)的問(wèn)題。首先我們將從零開(kāi)始了解生成函數式接口的完整過(guò)程,然后還將使用函數式編程來(lái)解釋一套基于GoF的設計模式。 第9章,函數式編程:進(jìn)階,包括22個(gè)Java函數式編程的進(jìn)階問(wèn)題。在本章我們會(huì )重點(diǎn)關(guān)注流的經(jīng)典操作(如f?ilter和map)的相關(guān)問(wèn)題,并討論無(wú)限流、null-safe流和默認方法這些內容。本章還會(huì )涵蓋分組、分區、收集器(包括JDK 12的teeing()收集器和自定義收集器開(kāi)發(fā))這些內容。此外,我們也會(huì )針對takeWhile()、dropWhile()、組合函數、謂詞、比較器、Lambda表達式的驗證和調試等其他熱門(mén)問(wèn)題展開(kāi)討論。 第10章,并發(fā):線(xiàn)程池、Callable接口以及同步器,包含了涉及Java并發(fā)的14個(gè)問(wèn)題。我們從幾個(gè)涉及線(xiàn)程生命周期、對象和類(lèi)級別的鎖的基礎問(wèn)題開(kāi)始,然后討論關(guān)于Java線(xiàn)程池的一系列問(wèn)題,包含JDK 8實(shí)現的工作竊?。╳ork-stealing)線(xiàn)程池。之后,我們會(huì )花點(diǎn)精力研究Callable和Future。最后,我們將探究Java有關(guān)同步器的一些問(wèn)題【例如屏障(barrier)、信號量(semaphore)和交換器(exchanger)】。通過(guò)本章的學(xué)習,你應該可以熟悉Java并發(fā)的主要內容并準備好處理一些高級問(wèn)題了。 第11章,并發(fā):深入探討,包含13個(gè)Java并發(fā)相關(guān)問(wèn)題,涵蓋fork/join框架、CompletableFuture、ReentrantLock、ReentrantReadWriteLock、StampedLock、原子變量(atomic variables)、任務(wù)取消、可中斷方法、thread-local和死鎖(deadlock)等內容。并發(fā)性是每一位開(kāi)發(fā)人員的必修課,尤其在求職面試中頗受重視,這也是為什么上一章和本章如此重要的原因。完成本章閱讀后,你將對并發(fā)有相當的了解 第12章,Optional,包括24個(gè)問(wèn)題,旨在提示你注意使用Optional的幾條規則。 第13章,HTTP Client和WebSocket API,包括20個(gè)涵蓋HTTP Client和WebSocket API的相關(guān)問(wèn)題。還記得HttpUrlConnection嗎?JDK 11附帶的HTTP Client API可以認為是對HttpUrlConnection的重新發(fā)明。HTTP Client API易于使用并支持HTTP/2(默認)和HTTP/1.1。為了向后兼容,當服務(wù)器不支持HTTP/2時(shí),HTTP Client API會(huì )自動(dòng)從HTTP/2降級到HTTP 1.1。此外,HTTP Client API支持同步和異步編程模型,并依賴(lài)流來(lái)傳輸數據(響應式流)。它還支持WebSocket協(xié)議,該協(xié)議在實(shí)時(shí)Web應用程序中被使用,以提供具有低開(kāi)銷(xiāo)的客戶(hù)端-服務(wù)器通信。 如何從本書(shū)中獲得最大的收益 最好先掌握一些Java語(yǔ)言的基礎知識,建議安裝以下組件: · 適合自己的IDE(非必須)。 · JDK 12和Maven 3.3.x。 · 必要時(shí),安裝一些額外的第三方庫。 下載示例代碼文件 你可以從https://***。 以下是下載代碼文件的詳細步驟: 1.在https://***。 2.選擇支持(Support)選項卡。 3.點(diǎn)擊代碼下載(Code Downloads)。 4.在搜索(Search)框中輸入書(shū)名,然后按照屏幕上的指示進(jìn)行操作。 下載文件后,請務(wù)必使用最新版本的軟件進(jìn)行解壓: · 適用于Windows的WinRAR / 7-Zip。 · 適用于Mac的Zipeg / iZip / UnRarX。 · 適用于Linux的7-Zip / PeaZip。 本書(shū)的代碼包也托管在GitHub上,其網(wǎng)址為https://*** 此外,Packt還提供了更多書(shū)籍資源,你可以在https://*** 下載彩色圖像 本書(shū)還提供了書(shū)中所涉及圖片的PDF文件(彩色圖像)。你可以在這里下載:https://static.packt-*** 書(shū)中的特殊文本格式說(shuō)明 CodeInText:表示文本中的代碼字、數據庫表名稱(chēng)、文件夾名稱(chēng)、文件名、文件擴展名、路徑名、虛擬URL、用戶(hù)輸入和Twitter句柄等。例如:“如果當前字符存在于Map實(shí)例中,那么只需將其出現次數加1?!? 書(shū)中代碼格式如下: public MapcountDuplicateCharacters(String str) { Map result = new HashMap<>(); //或者使用for (char ch : str.toCharArray()) { ... } for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); ***pute(ch, (k, v) -> (v == null) ? 1 : ++v); } return result; } 粗體:用于表示新的術(shù)語(yǔ)、重要的文本等。例如,菜單或對話(huà)框中出現的詞語(yǔ),在文本中呈現如下:“在Java中,邏輯AND運算符用&&表示,邏輯OR運算符用||表示,邏輯XOR運算符用^表示?!? 提示:提示和技巧以這種形式呈現。 譯者的話(huà) 關(guān)于本書(shū) 這是一本Java領(lǐng)域的重量級作品。盡管本書(shū)首版出版于2019年末,但時(shí)至今日,書(shū)中圍繞JDK 8~12的特性所展開(kāi)的探索與實(shí)踐,仍然值得眾多開(kāi)發(fā)者深入學(xué)習體會(huì )。 本書(shū)的特色在于,它不僅會(huì )告訴你該如何運用好Java這門(mén)語(yǔ)言,還會(huì )剖析一些常見(jiàn)的編程陷阱,幫助你規避一些開(kāi)發(fā)問(wèn)題,從而編寫(xiě)出更加高效和優(yōu)雅的程序。所以,無(wú)論是從頭到尾詳讀各章內容并主動(dòng)實(shí)踐,還是從感興趣的章節或具體問(wèn)題入手,你一定會(huì )從這200多個(gè)精心設計的問(wèn)題中獲得寶貴的經(jīng)驗。 關(guān)于我們 我們很榮幸能夠負責本書(shū)的翻譯工作。在翻譯分工方面,金嘉怡負責前后輔文及第1~5章,夏鈺輝負責第6~9章,黃堅負責第10~13章。在大家完成翻譯之后,金嘉怡負責通讀全文,完成校對與統稿,并盡量保證風(fēng)格和術(shù)語(yǔ)的統一。 形成初稿后,為了讓不同讀者群體都有良好的閱讀體驗,金嘉怡還邀請到了數十位審校成員,其中不乏多位具有8年、5年、3年以上工作經(jīng)驗的開(kāi)發(fā)者,以及剛畢業(yè)的計算機專(zhuān)業(yè)的朋友。大家的奉獻使得本書(shū)更趨完善,其中,經(jīng)驗豐富的從業(yè)者為內容的專(zhuān)業(yè)性提供了保障,而新手視角的建議,也讓各種復雜概念的表述更加通俗易懂。 參與審校的貢獻者分別是郭澤軒、韓西雅、侯旭、藍海珊、李琦敏、李永敬、劉瓊、龍翔、陸雙雙、沈曼、石一舟、譚文斌、王銘洋、王勝、王思未、王曉迪、魏黎、邢立文、熊梓潼、徐增昀、楊茜嵐、易玉、趙曉暉、周銀、朱子晟(按照姓名拼音排序)等。在此,誠摯感謝為本書(shū)無(wú)私付出的每一位貢獻者。 本書(shū)的翻譯工作歷時(shí)近一年,大家都犧牲了大量的個(gè)人時(shí)間,盡管我們已經(jīng)盡最大努力來(lái)給讀者呈現最好的效果,但由于水平有限,譯作中仍不可避免地存在一些疏漏及不足之處。期待大家提出寶貴的意見(jiàn),幫助我們不斷改進(jìn)。 金嘉怡 夏鈺輝 黃堅 2023年12月
本書(shū)通過(guò)探討Java開(kāi)發(fā)工作中常會(huì )遇到的問(wèn)題及相關(guān)解決方案,介紹了涉及字符串、數字、數組、集合、數據結構、日期和時(shí)間、對象、不可變性、Switch表達式、類(lèi)型推斷、Java I/O、Java反射、函數式編程、并發(fā)、HTTP Client API和Websocket等方面的核心知識與實(shí)用技巧。 這些簡(jiǎn)單或復雜的問(wèn)題,將幫助你提升解決現實(shí)問(wèn)題的編程能力,使你了解相關(guān)問(wèn)題基于Java 8~12的最佳實(shí)踐,同時(shí)還可以檢測你對相關(guān)技術(shù)的掌握程度。 本書(shū)可供初級和中級Java開(kāi)發(fā)人員參考,同樣也適合正為相關(guān)技術(shù)面試做準備的求職者閱讀。
第1章 字符串、數字和數學(xué) 1 問(wèn)題 1 解決方案 2 1.統計重復字符的數量 3 2.尋找第一個(gè)非重復字符 5 3.反轉字母和單詞 7 4.檢查字符串是否僅包含數字 7 5.統計元音和輔音的數量 8 6.統計某個(gè)特定字符的出現次數 10 7.將String轉換為int、long、float或double類(lèi)型 11 8.去除字符串中的空格 12 9.用分隔符連接多個(gè)字符串 12 10.生成全部排列組合 13 11.檢查字符串是否為回文 15 12.刪除重復的字符 16 13.刪除給定的字符 17 14.找到出現次數最多的字符 19 15.按長(cháng)度對字符串數組排序 20 16.檢查字符串是否包含子串 22 17.計算字符串中子串的出現次數 22 18.判斷兩個(gè)字符串是否互為變位詞 23 19.聲明多行字符串(文本塊) 24 20.重復拼接同一個(gè)字符串n次 25 21.刪除首尾空格 27 22.尋找最長(cháng)公共前綴 27 23.應用縮進(jìn) 28 24.字符串轉換 30 25.求最小值與最大值 30 26.求兩個(gè)大數之和(int/long)并處理運算溢出的情況 31 27.解析特定進(jìn)制下的無(wú)符號數 32 28.通過(guò)無(wú)符號轉換轉變數字 33 29.比較兩個(gè)無(wú)符號數 33 30.無(wú)符號數的除法和取模 34 31.判斷float/double是否為有限浮點(diǎn)數 34 32.對兩個(gè)布爾表達式執行邏輯AND / OR / XOR運算 35 33.將BigInteger轉換為基本類(lèi)型 36 34.將long類(lèi)型轉換為int類(lèi)型 37 35.計算取整除和模數 37 36.相鄰浮點(diǎn)數 38 37.求兩個(gè)大數的乘積(int/long)并處理運算溢出的情況 39 38.融合乘加(FMA) 40 39.緊湊數字格式化 41 小結 44 第2章 對象、不可變性和Switch表達式 45 問(wèn)題 45 解決方案 46 40.用函數式和命令式風(fēng)格的代碼檢查空引用 46 41.檢查空引用并拋出自定義的NullPointerException異常 48 42.檢查空引用并拋出指定的異常 50 43.檢查空引用并返回非空默認引用 51 44.檢查索引是否在【0, length)范圍內 52 45.檢查子區間是否在【0, length)范圍內 54 46. equals()和hashCode() 55 47.簡(jiǎn)述不可變對象 59 48.不可變字符串 59 49.編寫(xiě)一個(gè)不可變類(lèi) 62 50.在不可變類(lèi)中傳遞/返回可變對象 63 51.使用建造者模式編寫(xiě)不可變類(lèi) 65 52.避免在不可變對象中出現錯誤數據 68 53.克隆對象 69 54.重寫(xiě)toString() 73 55.新版Switch表達式 75 56.多個(gè)case標簽 77 57.語(yǔ)句塊 77 小結 78 第3章 處理日期和時(shí)間 79 問(wèn)題 79 解決方案 80 58.字符串與日期時(shí)間的轉換 80 59.格式化日期和時(shí)間 83 60.獲取當前日期/時(shí)間(不含時(shí)間/日期) 86 61.基于LocalDate和LocalTime構建LocalDateTime 86 62.通過(guò)Instant類(lèi)獲取機器時(shí)間 86 63.使用基于日期的值(Period)定義時(shí)間段;使用基于時(shí)間的值(Duration)表示一小段時(shí)間 89 64.提取日期和時(shí)間單位 93 65.加減日期時(shí)間 94 66.獲取所有時(shí)區的UTC和GMT 95 67.獲取所有可用時(shí)區的本地日期時(shí)間 96 68.顯示有關(guān)航班的日期時(shí)間信息 97 69.將Unix時(shí)間戳轉換為日期時(shí)間 99 70.查找某月的第一天/最后一天 99 71.定義/提取時(shí)區偏移 102 72.在Date和Temporal之間轉換 103 73.遍歷一段日期范圍 106 74.計算年齡 108 75.獲得一天的起始和結束時(shí)間 108 76.兩個(gè)日期之間的差異 111 77.實(shí)現一個(gè)國際象棋計時(shí)器 113 小結 116 第4章 類(lèi)型推斷 117 問(wèn)題 117 解決方案 118 78.簡(jiǎn)單的var示例 118 79.使用var與基本類(lèi)型 120 80.使用var和隱式類(lèi)型轉換來(lái)提高代碼的可維護性 121 81.顯式向下轉型(downcast)應避免使用var 122 82.在變量名沒(méi)有足夠的類(lèi)型信息保障可讀性時(shí)應避免使用var 123 83.結合LVTI和面向接口編程技術(shù) 124 84.結合LVTI和鉆石操作符 124 85.將數組賦值給var 125 86.在多變量聲明中使用LVTI 126 87. LVTI和變量作用域 127 88. LVTI和三元操作符 128 89. LVTI和for循環(huán) 129 90. LVTI和流 130 91.使用LVTI拆分嵌套/大型表達式鏈 130 92. LVTI和方法返回值及參數類(lèi)型 131 93. LVTI和匿名類(lèi) 132 94. LVTI可以是final變量或effectively final變量 132 95. LVTI和Lambda表達式 134 96. LVTI和空初始化器、實(shí)例變量以及catch塊變量 134 97. LVTI和泛型類(lèi)型 135 98. LVTI、通配符、協(xié)變和逆變 136 小結 138 第5章 數組、集合和數據結構 139 問(wèn)題 139 解決方案 140 99.對數組進(jìn)行排序 140 100.查找數組元素 149 101.檢查兩個(gè)數組是否相等或不匹配 153 102.按字典序比較兩個(gè)數組 156 103.用數組創(chuàng )建流 158 104.計算數組的最小值、最大值和平均值 159 105.反轉數組 162 106.填充和設置數組 164 107.下一個(gè)更大的元素(NGE) 165 108.改變數組大小 166 109.創(chuàng )建不可修改/不可變的集合 167 110.映射默認值 172 111.判斷Map中鍵是否存在或缺失 173 112.從Map中移除元素 177 113.替換Map條目 178 114.比較兩個(gè)Map 179 115.對Map進(jìn)行排序 180 116.復制HashMap 182 117.合并兩個(gè)Map 183 118.移除集合中所有符合謂詞條件的元素 184 119.將集合轉換為數組 186 120.使用列表篩選集合 187 121.替換列表元素 188 122.線(xiàn)程安全的集合、棧和隊列 189 123.廣度優(yōu)先搜索(BFS) 193 124.前綴樹(shù)(Trie) 195 125.元組(Tuple) 198 126.并查集 200 127.芬威克樹(shù)或二進(jìn)制索引樹(shù) 203 128.布隆過(guò)濾器 206 小結 209 第6章 Java I/O路徑、文件、緩存、掃描和格式化 210 問(wèn)題 210 解決方案 211 129.創(chuàng )建文件路徑 211 130.變換文件路徑 214 131.拼接文件路徑 215 132.通過(guò)兩個(gè)路徑創(chuàng )建相對路徑 216 133.比較文件路徑 217 134.輪詢(xún)路徑 218 135.監聽(tīng)路徑 225 136.流式獲取文件文本內容 228 137.在文件樹(shù)中搜索文件或文件夾 228 138.高效讀寫(xiě)文本文件 230 139.高效讀寫(xiě)二進(jìn)制文件 235 140.大文件搜索 239 141.將一個(gè)JSON/CSV文件作為一個(gè)對象讀取 241 142.處理臨時(shí)文件和文件夾 245 143.過(guò)濾文件 249 144.判斷兩個(gè)文件是否不匹配 252 145.循環(huán)字節緩沖區 254 146.標記解析文件 259 147.將格式化輸出直接寫(xiě)入文件 263 148.使用Scanner 265 小結 268 第7章 Java反射類(lèi)、接口、構造函數、方法和字段 269 問(wèn)題 269 解決方案 270 149.檢查包 270 150.檢查類(lèi)和超類(lèi) 273 151.通過(guò)反射構造函數實(shí)例化 279 152.獲取參數上的注解 282 153.獲取合成構造函數 283 154.檢查可變參數 284 155.檢查默認方法 285 156.通過(guò)反射實(shí)現基于嵌套的訪(fǎng)問(wèn)控制 285 157.面向getter和setter使用反射 288 158.反射與注解 294 159.調用實(shí)例方法 299 160.獲取靜態(tài)方法 300 161.獲取方法、字段和異常的泛型 301 162.獲取公共字段和私有字段 304 163.處理數組 305 164.檢查模塊 306 165.動(dòng)態(tài)代理 307 小結 310 第8章 函數式編程:基礎與設計模式 311 問(wèn)題 311 解決方案 311 166.編寫(xiě)函數式接口 312 167. Lambda簡(jiǎn)介 317 168.實(shí)現環(huán)繞執行模式 318 169.實(shí)現工廠(chǎng)模式 320 170.實(shí)現策略模式 322 171.實(shí)現模板方法模式 323 172.實(shí)現觀(guān)察者模式 325 173.實(shí)現貸出模式 327 174.實(shí)現裝飾器模式 329 175.實(shí)現級聯(lián)建造者模式 332 176.實(shí)現命令模式 333 小結 335 第9章 函數式編程:進(jìn)階 336 問(wèn)題 336 解決方案 337 177.測試高階函數 337 178.測試使用Lambda表達式的方法 338 179.調試Lambda表達式 340 180.過(guò)濾流中的非0元素 342 181.無(wú)限流、takeWhile()和dropWhile() 344 182.映射流中的元素 351 183.找出流中的元素 356 184.匹配流中元素 357 185.流中的sum、max和min操作 359 186.收集流的返回結果 362 187.連接流的返回結果 364 188.聚合收集器 365 189.分組(grouping) 369 190.分區(partitioning) 376 191. filtering、flattening和mapping收集器 379 192. teeing 382 193.編寫(xiě)自定義收集器 385 194.方法引用 389 195.并行處理流 391 196. null-safe流 395 197.組合方法、謂詞和比較器 397 198.默認方法 402 小結 403 第10章 并發(fā):線(xiàn)程池、Callable接口以及同步器 404 問(wèn)題 404 解決方案 405 199.線(xiàn)程生命周期狀態(tài) 405 200.對象級鎖與類(lèi)級鎖的對比 410 201. Java中的線(xiàn)程池 413 202.單線(xiàn)程的線(xiàn)程池 417 203.擁有固定線(xiàn)程數量的線(xiàn)程池 423 204.帶緩存和調度的線(xiàn)程池 424 205.工作竊?。╳ork-stealing)線(xiàn)程池 430 206. Callable和Future 435 207.調用多個(gè)Callable任務(wù) 440 208.鎖存器(latch) 442 209.屏障(barrier) 445 210.交換器(exchanger) 448 211.信號量(semaphore) 451 212.移相器(phaser) 453 小結 458 第11章 并發(fā):深入探討 459 問(wèn)題 459 解決方案 460 213.可中斷方法 460 214. fork/join框架 463 215. fork/join框架和compareAndSetForkJoinTaskTag() 469 216. CompletableFuture 472 217.組合多個(gè)CompletableFuture實(shí)例 486 218.優(yōu)化忙等待 490 219.任務(wù)的取消 491 220.線(xiàn)程局部存儲(ThreadLocal) 492 221.原子變量 496 222.可重入鎖(ReentrantLock) 500 223.可重入讀寫(xiě)鎖(ReentrantReadWriteLock) 503 224.郵戳鎖(StampedLock) 505 225.死鎖(哲學(xué)家就餐問(wèn)題) 508 小結 511 第12章 Optional 512 問(wèn)題 512 解決方案 513 226.初始化Optional 513 227. Optional.get()和值丟失 514 228.返回一個(gè)預先構造的默認值 514 229.返回一個(gè)不存在的默認值 515 230.拋出NoSuchElementException異常 516 231. Optional和null引用 517 232.消費一個(gè)存在內容的Optional類(lèi) 518 233.根據情況返回一個(gè)給定的Optional類(lèi)(或另一個(gè)Optional類(lèi)) 519 234.通過(guò)orElseFoo()鏈接多個(gè)Lambda表達式 519 235.不要只是為了獲取一個(gè)值而使用Optional 521 236.不要將Optional用于字段 521 237.不要將Optional用于構造函數的參數 522 238.不要將Optional用于setter類(lèi)方法的參數 523 239.不要將Optional用于方法的參數 524 240.不要將Optional用于返回空的或者null的集合或數組 526 241.避免在集合中使用Optional 527 242.將of()和ofNullable()搞混淆 528 243. Optional與OptionalInt 529 244.確定Optional的相等性 529 245.通過(guò)map()和flatMap()轉換值 530 246.通過(guò)Optional.filter()過(guò)濾值 532 247.鏈接Optional和Stream API 532 248. Optional和識別敏感類(lèi)操作 534 249.在Optional的內容為空時(shí)返回布爾值 535 小結 535 第13章 HTTP Client和WebSocket API 536 問(wèn)題 536 解決方案 537 250. HTTP/2 537 251.觸發(fā)一次異步GET請求 538 252.設置一個(gè)代理 540 253.設置/獲取請求頭 540 254.指定HTTP方式 542 255.設置請求體 543 256.設置連接身份認證 545 257.設置請求超時(shí) 546 258.設置重定向策略 546 259.發(fā)送同步和異步請求 547 260.處理cookie 549 261.獲取響應信息 550 262.處理響應的請求體類(lèi)型 550 263.獲取、更新和保存JSON 552 264.壓縮 555 265.處理表單數據 556 266.下載資源 557 267.使用multipart上傳 558 268. HTTP/2的服務(wù)器端推送 561 269. WebSocket 564 小結 566
ISBN:978-7-122-44959-7
語(yǔ)種:漢文
開(kāi)本:16
出版時(shí)間:2024-07-01
裝幀:平
頁(yè)數:566