內容簡介
本書內容改編自第 12 屆 iT 邦幫忙鐵人賽
Software Development 組佳作網站系列文章
《新手也能懂的 Kotlin Collection 賞玩門道》
集合(Collection)是各程式語言裡常見的資料類別,在Kotlin 裡共有 Array、List、Set 及 Map 四種,在標準函式庫裡提供一系列設計精妙的集合 API,若能好好運用,可以減少很多重複冗長的工作,對操作資料有很大的幫助。本書專為 Kotlin 開發者設計,透過技法、心法、實戰三部份,系統化的解釋 Kotlin 集合的原理、功能及應用,是一本 Kotlin 開發者桌上必備的工具書。
書籍特色
技法:
依不同目的及特性將 Kotlin 集合分類,綜覽超過 200 個方法,搭配範例程式碼及速查地圖,豐富讀者對操作技法的認識。
心法:
要掌握 Kotlin 集合,除了要精通語法外,也需通曉實作原理。書中透過閱讀標準函式庫的原始碼,陸續討論語法設計、命名邏輯及組合技等心法。
實戰:
只有理論是不夠的,唯有搭配實戰才能將知識落實在日常任務裡。透過情境解題,綜合運用集合的功能來面對各種資料處理情境,活用從心法與技法學到的知識。
專業推薦
作者以《技法》、《心法》以及《實戰》三大篇幅來帶領讀者瞭解 Kotlin Collections 的 What、Why、以及 How,協助 Kotlin 開發人員融會貫通,信手捻來高表達力且高品質的程式碼。
── 上官林傑(Eric)
Google 全球開發者計劃台灣香港及南亞區經理
無論你是新手或是老手,Kotlin 都值得一學,而Collection 是日常處理各式各樣 Flow 的重要角色。本書透過合理的難易度安排,除了能像工具書使用外,也用更高的角度去觀察 Kotlin Collections 站在 Java Collections巨人肩上的設計巧思。
── 黃健旻(Vincent)
Google 官方認證 Kotlin 技術專家
本書從不同角度,深入剖析 Kotlin Collection 的各種細節,處處都值得參考及研究。讀者在閱讀後,不只能學到 Collection 的用法,還可以感受到 Kotlin 設計的思考脈絡,以另一種視角享受寫程式的樂趣。
── 趙家笙(Recca)
Taiwan Kotlin User Group 主辦人
Software Development 組佳作網站系列文章
《新手也能懂的 Kotlin Collection 賞玩門道》
集合(Collection)是各程式語言裡常見的資料類別,在Kotlin 裡共有 Array、List、Set 及 Map 四種,在標準函式庫裡提供一系列設計精妙的集合 API,若能好好運用,可以減少很多重複冗長的工作,對操作資料有很大的幫助。本書專為 Kotlin 開發者設計,透過技法、心法、實戰三部份,系統化的解釋 Kotlin 集合的原理、功能及應用,是一本 Kotlin 開發者桌上必備的工具書。
書籍特色
技法:
依不同目的及特性將 Kotlin 集合分類,綜覽超過 200 個方法,搭配範例程式碼及速查地圖,豐富讀者對操作技法的認識。
心法:
要掌握 Kotlin 集合,除了要精通語法外,也需通曉實作原理。書中透過閱讀標準函式庫的原始碼,陸續討論語法設計、命名邏輯及組合技等心法。
實戰:
只有理論是不夠的,唯有搭配實戰才能將知識落實在日常任務裡。透過情境解題,綜合運用集合的功能來面對各種資料處理情境,活用從心法與技法學到的知識。
專業推薦
作者以《技法》、《心法》以及《實戰》三大篇幅來帶領讀者瞭解 Kotlin Collections 的 What、Why、以及 How,協助 Kotlin 開發人員融會貫通,信手捻來高表達力且高品質的程式碼。
── 上官林傑(Eric)
Google 全球開發者計劃台灣香港及南亞區經理
無論你是新手或是老手,Kotlin 都值得一學,而Collection 是日常處理各式各樣 Flow 的重要角色。本書透過合理的難易度安排,除了能像工具書使用外,也用更高的角度去觀察 Kotlin Collections 站在 Java Collections巨人肩上的設計巧思。
── 黃健旻(Vincent)
Google 官方認證 Kotlin 技術專家
本書從不同角度,深入剖析 Kotlin Collection 的各種細節,處處都值得參考及研究。讀者在閱讀後,不只能學到 Collection 的用法,還可以感受到 Kotlin 設計的思考脈絡,以另一種視角享受寫程式的樂趣。
── 趙家笙(Recca)
Taiwan Kotlin User Group 主辦人
作者簡介
范聖佑 (Shengyou Fan) 著
Web 開發出身,歷任軟體公司設計師、工程師、研究員,擅長以跨領域思維協助團隊做技術導入及建立技術品牌。平時醉心於技術研究,力求將複雜的技術名詞用通俗易懂的方式讓新手也能吸收。目前在 JetBrains 擔任技術傳教士,負責推廣 JetBrains IDE 及 Kotlin 程式語言。
工作之餘也熱情經營技術社群,自 2014 年以來陸續建立 PHP 也有 Day、Laravel 台灣、LaravelConf Taiwan、Laravel 道場等技術社群、研討會及顧問服務。近年來專
注在以 Kotlin 為核心的相關技術,從2020 年起舉辦Kotlin 讀書會、練功場、技術小聚並每年號召夥伴一起參與 iT 邦幫忙鐵人賽,本書原型《新手也能懂的 Kotlin Collection 賞玩門道》即為作者於第 12 屆鐵人賽的佳作得獎作品。
Web 開發出身,歷任軟體公司設計師、工程師、研究員,擅長以跨領域思維協助團隊做技術導入及建立技術品牌。平時醉心於技術研究,力求將複雜的技術名詞用通俗易懂的方式讓新手也能吸收。目前在 JetBrains 擔任技術傳教士,負責推廣 JetBrains IDE 及 Kotlin 程式語言。
工作之餘也熱情經營技術社群,自 2014 年以來陸續建立 PHP 也有 Day、Laravel 台灣、LaravelConf Taiwan、Laravel 道場等技術社群、研討會及顧問服務。近年來專
注在以 Kotlin 為核心的相關技術,從2020 年起舉辦Kotlin 讀書會、練功場、技術小聚並每年號召夥伴一起參與 iT 邦幫忙鐵人賽,本書原型《新手也能懂的 Kotlin Collection 賞玩門道》即為作者於第 12 屆鐵人賽的佳作得獎作品。
內容目錄
Chapter 01 技法篇
1-1 集合四大物件
1-1-1 Array
1-1-2 List
1-1-3 Set
1-1-4 Map
1-1-5 四大物件綜合比較
1-2 探索集合方法的前置工作
1-2-1 建立練習專案
1-2-2 完成首次提交
1-2-3 推送程式碼到 GitHub
1-2-4 調整 Gradle 相關設定
1-2-5 建立套件
1-2-6 使用 Kotlin Worksheet
1-2-7 使用本書範例
1-2-8 錯誤排除
1-3 建立集合的方法
1-3-1 總覽圖
1-3-2 Of 系列函式
1-3-3 Empty 系列函式
1-3-4 Builder 系列函式
1-3-5 Instantiation 系列方法
1-3-6 Copy 系列方法
1-3-7 回顧
1-4 從集合取值的方法
1-4-1 總覽圖
1-4-2 Index 取單值系列方法
1-4-3 Get 取單值系列方法
1-4-3 Element 取單值系列方法
1-4-4 First 取單值系列方法
1-4-5 Last 取單值系列方法
1-4-6 Random 取單值系列方法
1-4-7 Single 取單值系列方法
1-4-8 Find 取單值系列方法
1-4-9 Search 取單值系列方法
1-4-10 Take 取區段系列方法
1-4-11 Drop 取區段系列方法
1-4-12 Slice 取區段系列方法
1-4-13 Chunk 取區段方法
1-4-14 Window 取區段方法
1-4-15 Zip 取區段方法
1-4-16 回顧
1-5 排序集合的方法
1-5-1 總覽圖
1-5-2 Sort 系列方法
1-5-3 Reverse 系列方法
1-5-4 Shuffle 系列方法
1-5-5 回顧
1-6 檢查集合的方法
1-6-1 總覽圖
1-6-2 Is 系列方法
1-6-3 Condition 系列方法
1-6-4 Contains 系列方法
1-6-5 回顧
1-7 操作集合的方法
1-7-1 總覽圖
1-7-2 Add 系列方法
1-7-3 Remove 系列方法
1-7-4 Update 系列方法
1-7-5 Order 系列方法
1-7-6 回顧
1-8 集合分群的方法
1-8-1 總覽圖
1-8-2 Group 系列方法
1-8-3 Partition 系列方法
1-8-4 Distinct 系列方法
1-8-5 Filter 系列方法
1-8-6 回顧
1-9 轉換集合的方法
1-9-1 總覽圖
1-9-2 forEach 系列方法
1-9-3 Map 系列方法
1-9-4 文氏圖系列方法
1-9-5 Zip 系列方法
1-9-6 Associate 系列方法
1-9-7 Flat 系列方法
1-9-8 Scan 系列方法
1-9-9 回顧
1-10 集合聚合的方法
1-10-1 總覽圖
1-10-2 Calculating 系列方法
1-10-3 Join 系列方法
1-10-4 Reduce 系列方法
1-10-4 Fold 系列方法
1-10-5 With-grouping 系列方法
1-10-6 回顧
1-11 集合轉型的方法
1-11-1 總覽圖
1-11-2 toArray 系列方法
1-11-3 toCollection 系列方法
1-11-4 toSortedCollection 系列方法
1-11-5 toOthers 系列方法
1-11-6 回顧
1-12 集合方法速查地圖
Chapter 02 心法篇
2-1 探索集合實作奧祕
2-1-1 為什麼可以直接用函式建立集合?
2-1-2 為什麼集合可以儲存各種型別的元素?
2-1-3 集合方法為什麼可以讓外部決定行為?
2-1-4 為什麼集合方法不是宣告在類別裡?
2-1-5 為什麼同一個方法可以有兩種使用方式?
2-1-6 為什麼集合方法可以串接在一起?
2-1-7 為什麼集合可以傳入 for 迴圈裡?
2-1-8 為什麼可以用 println() 印出 List、Set、Map 的元素?
2-1-9 宣告 Map 時,配對 Key/Value 的 to 是關鍵字嗎?
2-1-10 為什麼 List 及 Map 的 Key 可以解構成變數回傳?
2-1-11 回顧:標準函式庫 = Kotlin 語法寶庫
2-2 集合方法變化形釋疑
2-2-1 時態慣例
2-2-2 To
2-2-3 By
2-2-4 With
2-2-5 Of
2-2-6 At
2-2-7 Or
2-2-8 條件判斷相關(If、While)
2-2-9 常用英文字
2-2-10 排列組合
2-2-11 回顧
2-3 與集合併用的組合技
2-3-1 以 Range 產生指定範圍
2-3-2 把字串轉成集合使用
2-3-3 提升處理大量資料時的效能
2-3-4 實作 Comparable 讓類別能被排序或比較
2-3-5 將集合串接 Scope Function
2-3-6 回顧
Chapter 03 實戰篇導言
3-1 樂透選號
3-1-1 做一個發財夢
3-1-2 同理可證
3-1-3 更進一步
3-1-4 分享您的超能力
3-1-5 回顧
3-2 資料統計運算
3-2-1 微型資料科學
3-2-2 逐行印出檔案內容
3-2-3 從純文字轉型成資料類別
3-2-4 以集合方法做統計運算
3-2-5 調整輸出樣式
3-2-6 產生隨機資料集
3-2-7 回顧
3-3 萬用 Mock Server
3-3-1 當個龍的傳人
3-3-2 Mock Server 快速原型
3-3-3 設計 API 規格
3-3-4 建立 Ktor 專案
3-3-5 Ktor 語法簡介
3-3-6 實作 API 路徑
3-3-7 實作資料類別
3-3-8 產生多筆資料及分頁資訊
3-3-9 回傳 JSON 格式的內容
3-3-10 增加資料擬真性
3-3-11 實作分頁
3-3-12 模擬 API 回應速度
3-3-13 產生 HTTPS 網址
3-3-14 回顧
Chapter 04 結語
4-1 有意識的把集合應用在實務上
4-2 小步前進,持續改善
4-3 條條大路通羅馬
4-4 關於效能與效率的反思
4-5 要樂在其中
4-6 延伸學習資源
Chapter 05 附錄
5-1 安裝 IntelliJ IDEA 開發工具
5-1-1 IntelliJ IDEA 簡介
5-1-2 安裝 JetBrains Toolbox App
5-1-3 安裝 IntelliJ IDEA
5-2 在 Unix-like 作業系統上安裝/管理多個版本的 JDK
5-2-1 SDKMAN 簡介
5-2-2 安裝 SDKMAN
5-2-3 安裝多版本 JDK
5-2-4 切換及設定使用的 JDK 版本
5-2-5 其他常用 SDKMAN 指令
5-3 在 Windows 作業系統上安裝/管理多個版本的 JDK
5-3-1 Scoop 簡介
5-3-2 安裝 Scoop
1-1 集合四大物件
1-1-1 Array
1-1-2 List
1-1-3 Set
1-1-4 Map
1-1-5 四大物件綜合比較
1-2 探索集合方法的前置工作
1-2-1 建立練習專案
1-2-2 完成首次提交
1-2-3 推送程式碼到 GitHub
1-2-4 調整 Gradle 相關設定
1-2-5 建立套件
1-2-6 使用 Kotlin Worksheet
1-2-7 使用本書範例
1-2-8 錯誤排除
1-3 建立集合的方法
1-3-1 總覽圖
1-3-2 Of 系列函式
1-3-3 Empty 系列函式
1-3-4 Builder 系列函式
1-3-5 Instantiation 系列方法
1-3-6 Copy 系列方法
1-3-7 回顧
1-4 從集合取值的方法
1-4-1 總覽圖
1-4-2 Index 取單值系列方法
1-4-3 Get 取單值系列方法
1-4-3 Element 取單值系列方法
1-4-4 First 取單值系列方法
1-4-5 Last 取單值系列方法
1-4-6 Random 取單值系列方法
1-4-7 Single 取單值系列方法
1-4-8 Find 取單值系列方法
1-4-9 Search 取單值系列方法
1-4-10 Take 取區段系列方法
1-4-11 Drop 取區段系列方法
1-4-12 Slice 取區段系列方法
1-4-13 Chunk 取區段方法
1-4-14 Window 取區段方法
1-4-15 Zip 取區段方法
1-4-16 回顧
1-5 排序集合的方法
1-5-1 總覽圖
1-5-2 Sort 系列方法
1-5-3 Reverse 系列方法
1-5-4 Shuffle 系列方法
1-5-5 回顧
1-6 檢查集合的方法
1-6-1 總覽圖
1-6-2 Is 系列方法
1-6-3 Condition 系列方法
1-6-4 Contains 系列方法
1-6-5 回顧
1-7 操作集合的方法
1-7-1 總覽圖
1-7-2 Add 系列方法
1-7-3 Remove 系列方法
1-7-4 Update 系列方法
1-7-5 Order 系列方法
1-7-6 回顧
1-8 集合分群的方法
1-8-1 總覽圖
1-8-2 Group 系列方法
1-8-3 Partition 系列方法
1-8-4 Distinct 系列方法
1-8-5 Filter 系列方法
1-8-6 回顧
1-9 轉換集合的方法
1-9-1 總覽圖
1-9-2 forEach 系列方法
1-9-3 Map 系列方法
1-9-4 文氏圖系列方法
1-9-5 Zip 系列方法
1-9-6 Associate 系列方法
1-9-7 Flat 系列方法
1-9-8 Scan 系列方法
1-9-9 回顧
1-10 集合聚合的方法
1-10-1 總覽圖
1-10-2 Calculating 系列方法
1-10-3 Join 系列方法
1-10-4 Reduce 系列方法
1-10-4 Fold 系列方法
1-10-5 With-grouping 系列方法
1-10-6 回顧
1-11 集合轉型的方法
1-11-1 總覽圖
1-11-2 toArray 系列方法
1-11-3 toCollection 系列方法
1-11-4 toSortedCollection 系列方法
1-11-5 toOthers 系列方法
1-11-6 回顧
1-12 集合方法速查地圖
Chapter 02 心法篇
2-1 探索集合實作奧祕
2-1-1 為什麼可以直接用函式建立集合?
2-1-2 為什麼集合可以儲存各種型別的元素?
2-1-3 集合方法為什麼可以讓外部決定行為?
2-1-4 為什麼集合方法不是宣告在類別裡?
2-1-5 為什麼同一個方法可以有兩種使用方式?
2-1-6 為什麼集合方法可以串接在一起?
2-1-7 為什麼集合可以傳入 for 迴圈裡?
2-1-8 為什麼可以用 println() 印出 List、Set、Map 的元素?
2-1-9 宣告 Map 時,配對 Key/Value 的 to 是關鍵字嗎?
2-1-10 為什麼 List 及 Map 的 Key 可以解構成變數回傳?
2-1-11 回顧:標準函式庫 = Kotlin 語法寶庫
2-2 集合方法變化形釋疑
2-2-1 時態慣例
2-2-2 To
2-2-3 By
2-2-4 With
2-2-5 Of
2-2-6 At
2-2-7 Or
2-2-8 條件判斷相關(If、While)
2-2-9 常用英文字
2-2-10 排列組合
2-2-11 回顧
2-3 與集合併用的組合技
2-3-1 以 Range 產生指定範圍
2-3-2 把字串轉成集合使用
2-3-3 提升處理大量資料時的效能
2-3-4 實作 Comparable 讓類別能被排序或比較
2-3-5 將集合串接 Scope Function
2-3-6 回顧
Chapter 03 實戰篇導言
3-1 樂透選號
3-1-1 做一個發財夢
3-1-2 同理可證
3-1-3 更進一步
3-1-4 分享您的超能力
3-1-5 回顧
3-2 資料統計運算
3-2-1 微型資料科學
3-2-2 逐行印出檔案內容
3-2-3 從純文字轉型成資料類別
3-2-4 以集合方法做統計運算
3-2-5 調整輸出樣式
3-2-6 產生隨機資料集
3-2-7 回顧
3-3 萬用 Mock Server
3-3-1 當個龍的傳人
3-3-2 Mock Server 快速原型
3-3-3 設計 API 規格
3-3-4 建立 Ktor 專案
3-3-5 Ktor 語法簡介
3-3-6 實作 API 路徑
3-3-7 實作資料類別
3-3-8 產生多筆資料及分頁資訊
3-3-9 回傳 JSON 格式的內容
3-3-10 增加資料擬真性
3-3-11 實作分頁
3-3-12 模擬 API 回應速度
3-3-13 產生 HTTPS 網址
3-3-14 回顧
Chapter 04 結語
4-1 有意識的把集合應用在實務上
4-2 小步前進,持續改善
4-3 條條大路通羅馬
4-4 關於效能與效率的反思
4-5 要樂在其中
4-6 延伸學習資源
Chapter 05 附錄
5-1 安裝 IntelliJ IDEA 開發工具
5-1-1 IntelliJ IDEA 簡介
5-1-2 安裝 JetBrains Toolbox App
5-1-3 安裝 IntelliJ IDEA
5-2 在 Unix-like 作業系統上安裝/管理多個版本的 JDK
5-2-1 SDKMAN 簡介
5-2-2 安裝 SDKMAN
5-2-3 安裝多版本 JDK
5-2-4 切換及設定使用的 JDK 版本
5-2-5 其他常用 SDKMAN 指令
5-3 在 Windows 作業系統上安裝/管理多個版本的 JDK
5-3-1 Scoop 簡介
5-3-2 安裝 Scoop