前言........................................1
第1章字符串........... 11
1.1 測試字符串的相等性..................................14
1.2 創建多個字符串........................................16
1.3 分隔字符串........................................17
1.4 字符串中的變量代換..................................19
1.5 挨個處理字符串中的字符...........................23
1.6 字符串中的查找模式..................................27
1.7 字符串中的替換模式..................................30
1.8 抽取String 中模式匹配的部分.....................31
1.9 訪問字符串中的一個字符...........................33
1.10 在String 類中添加自定義的方法...............34
第2章數值..............39
2.1 從字符串到數值........................................40
2.2 數值類型轉換........................................44
2.3 重載默認數值類型......................................45
2.4 替代++ 和--........................................47
2.5 浮點數的比較........................................49
2.6 處理大數........................................51
2.7 生成隨機數........................................53
2.8 創建一個數值區間、列錶或者數組............55
2.9 格式化數值和金額......................................57
第3章控製結構.......60
3.1 for 和foreach 循環........................................61
3.2 在for 循環中使用多個計數器......................67
3.3 在for 循環中嵌入if 語句(衛語句)............69
3.4 創建for 錶達式(for/yield 組閤)................70
3.5 實現break 和continue...................................72
3.6 像三元運算符一樣使用if............................77
3.7 像switch 語句一樣使用匹配錶達式.............78
3.8 一條case 語句匹配多個條件........................83
3.9 將匹配錶達式的結果賦值給變量...............84
3.10 訪問匹配錶達式缺省case 的值..................84
3.11 在匹配錶達式中使用模式匹配.................85
3.12 在匹配錶達式中使用Case 類....................92
3.13 給Case 語句添加if 錶達式(衛語句).......93
3.14 使用匹配錶達式替換isInstanceOf.............94
3.15 在匹配錶達式中使用List..........................95
3.16 用try/catch 匹配一個或者更多的異常......97
3.17 在try/catch/finally 塊中使用變量前定義變量.........................98
3.18 創建自定義控製結構..............................100
第4章類和屬性.....103
4.1 創建一個主構造函數................................104
4.2 控製構造函數字段的可見性.....................108
4.3 定義輔助構造函數.................................... 111
4.4 定義私有的主構造函數............................115
4.5 設置構造函數參數的默認值.....................116
4.6 覆寫默認的訪問和修改方法.....................118
4.7 阻止生成getter 和setter 方法......................121
4.8 將代碼塊或者函數賦給字段.....................123
4.9 設置未初始化的var 字段類型....................125
4.10 在繼承類時處理構造函數參數...............127
4.11 調用父類的構造函數..............................129
4.12 何時使用抽象類......................................131
4.13 在抽象基類(或者特質) 裏定義屬性........133
4.14 用Case 類生成模闆代碼..........................137
4.15 定義一個equals 方法(對象的相等性)..141
4.16 創建內部類........................................144
第5章方法............147
5.1 控製方法作用域.......................................148
5.2 調用父類的方法.......................................152
5.3 方法參數默認值.......................................154
5.4 使用參數名........................................157
5.5 定義一個返迴多個值(Tuples) 的方法........159
5.6 調用getter/setter 方法時不使用括號..........160
5.7 創建接受變參的方法................................162
5.8 方法的異常聲明......................................164
5.9 支持鏈式調用編碼風格............................166解決辦法...167
第6章對象............170
6.1 對象的強製轉換.......................................171
6.2 Java.class 的Scala 等價類...........................173
6.3 確定對象所屬的類....................................174
6.4 用Object 啓動一個應用.............................175
6.5 用object 創建單例......................................177
6.6 用伴生類創建靜態成員............................178
6.7 將通用代碼放入包對象............................180
6.8 不使用new 關鍵字創建對象實例...............183
6.9 在Scala 中用apply 方法實現工廠方法........187
第7章包和導入.....190
7.1 花括號風格的包記號法............................191
7.2 引入一個或多個成員................................192
7.3 在導入時重命名成員................................194
7.4 在引入時隱藏一個類................................195
7.5 使用靜態導入........................................196
7.6 在任意地方使用Import 語句......................197
第8章特質............200
8.1 特質用作接口........................................200
8.2 使用特質中的抽象字段和實際字段..........203
8.3 像抽象類一樣使用特質............................204
8.4 簡單混入特質........................................205
8.5 通過繼承來限製特質的使用範圍.............206
8.6 限定特質隻可用於指定類型的子類..........208
8.7 保證特質隻能被添加到隻有一個特定方法的類型..........................210
8.8 為對象實例中添加特質............................211
8.9 像特質一樣繼承一個Java 接口..................212
第9章函數式編程..214
9.1 使用函數字麵量(匿名函數).................215
9.2 將函數作為變量.......................................216
9.3 定義接受簡單函數作為參數的方法..........220
9.4 更多復雜的函數.......................................222
9.5 使用閉包........................................226
9.6 使用部分應用函數....................................231
9.7 創建返迴函數的函數................................232
9.8 創建部分應用函數....................................235
9.9 一個真實的例子.......................................239
第10 章集閤..........242
10.1 理解集閤的層級結構..............................243
10.2 選擇一個集閤類......................................247
10.3 用一個集閤方法解決一個問題...............252
10.4 理解集閤的性能......................................258
10.5 在創建集閤時聲明一個類型...................260
10.6 理解可變變量與不可變集閤...................262
10.7 將Vector“變為”不可變序列................263
10.8 把ArrayBuffer 作為可變序列的第一選擇265
10.9 用foreach 遍曆一個集閤..........................267
10.10 用for 循環遍曆一個集閤........................269
10.11 使用zipWithIndex 或者zip 創建循環計數器........................272
10.12 迭代器的使用.......................................275
10.13 用for/yield 實現集閤間的轉換...............276
10.14 用map 實現集閤的變換.........................279
10.15 展平列錶的列錶與扁平化問題.............281
10.16 map,flatten 和flatMap 的組閤...............283
10.17 用filter 過濾一個集閤...........................285
10.18 從集閤中提取元素序列........................287
10.19 序列的分割(groupBy 、partition 等)..289
10.20 用reduce 和fold 方法遍曆集閤...............291
10.21 從序列中提取不重復的元素................296
10.22 閤並序列集閤.......................................297
10.23 用zip 將兩個序列集閤閤並為一對.........300
10.24 在集閤上創建一個惰性視圖.................301
10.25 利用Range 創建集閤..............................305
10.26 創建使用枚舉.......................................307
10.27 當需要一堆元素時使用元組.................308
10.28 集閤排序........................................310
10.29 通過mkString 將集閤轉換成字符串......313
第11 章列錶、數組、映射、集及其他..........................315
11.1 創建和填充列錶的不同方式...................316
11.2 創建可變List........................................318
11.3 為List 添加元素.......................................319
11.4 從List(或者ListBuffer)中刪除元素.....321
11.5 閤並或連接列錶......................................323
11.6 使用List 的懶惰版本,Stream.................324
11.7 創建和更新數組的不同方式...................326
11.8 創建大小可變的數組(ArrayBuffer)....328
11.9 刪除Array 和ArrayBuffer 的元素..............329
11.10 數組排序........................................331
11.11 創建多維數組........................................332
11.12 創建映射........................................334
11.13 選擇一種Map 實現.................................336
11.14 為可變映射添加、更新或刪除元素......338
11.15 為不可變映射添加、更新或刪除元素..340
11.16 訪問映射的值........................................342
11.17 遍曆映射........................................344
11.18 從映射中獲得所有的鍵或者值.............345
11.19 反轉鍵值........................................346
11.20 測試映射中鍵/值的存在........................347
11.21 過濾映射........................................348
11.22 根據鍵或者值對映射排序.....................350
11.23 找到映射中最大的鍵或者值.................354
11.24 給集添加元素........................................355
11.25 從集中刪除元素....................................357
11.26 使用可排序集........................................359
11.27 使用隊列........................................360
11.28 使用棧........................................362
11.29 使用Range........................................365
第12 章文件和進程367
12.1 如何打開和讀取文本文件.......................367
12.2 寫入文本文件........................................373
12.3 讀寫二進製文件......................................374
12.4 如何處理文本文件中的每個字符...........375
12.5 如何處理CSV 文件.................................376
12.6 將字符串僞裝為文件..............................379
12.7 使用序列化........................................381
12.8 列齣目錄中的文件.................................382
12.9 列舉目錄之下的子目錄..........................384
12.10 執行外部命令.......................................385
12.11 執行外部命令並使用標準輸齣.............388
12.12 處理外部命令的標準輸齣和標準錯誤輸齣............................390
12.13 構建命令管道.......................................392
12.14 重定嚮外部命令的標準輸齣和標準輸入.................................393
12.15 在進程中使用AND(&&)和OR(||)395
12.16 外部命令中處理通配符........................396
12.17 如何在不同目錄下運行進程.................397
12.18 在運行命令時設置環境變量.................398
12.19 執行外部命令的方法索引....................399
第13 章Actors 和並發........................................401
13.1 Actor 簡單入門........................................403
13.2 創建構造函數有參數的actor...................407
13.3 Actor 之間如何通信.................................409
13.4 理解Akka Actor 生命周期方法................411
13.5 啓動Actor ........................................414
13.6 停止Actors........................................416
13.7 關閉Akka Actor 係統...............................421
13.8 用watch 監控Actor 的死亡.......................422
13.9 Futures 的簡單並發.................................425
13.10 給Actor 發消息並等待迴復...................433
13.11 用become 切換不同狀態........................434
13.12 使用並發集閤.......................................436
第14 章命令行任務440
14.1 Scala REPL 初體驗..................................441
14.2 往REPL 中粘貼和加載代碼塊.................445
14.3 在REPL 的Classpath 中添加JAR 文件和類...............................448
14.4 在REPL 中運行Shell 命令........................449
14.5 用scalac 命令編譯,scala 命令運行.........451
14.6 反匯編和反編譯Scala 代碼......................452
14.7 尋找Scala 類庫........................................457
14.8 用scaladoc 生成文檔................................458
14.9 更快的命令行編譯器fsc..........................463
14.10 將Scala 作為腳本語言使用....................464
14.11 通過腳本訪問命令行參數.....................468
14.12 在Scala shell 腳本中輸入提示...............469
14.13 讓Scala 腳本運行得更快........................473
第15 章Web 服務...475
15.1 從Scala 對象中創建JSON 字符串.............475
15.2 從包含集閤的類中生成JSON 字符串......479
15.3 從JSON 字符串生成簡單Scala 對象.........484
15.4 將JSON 數據解析成為對象的數組..........485
15.5 用Scalatra 創建Web 服務..........................487
15.6 用Scalatra 掛載替換XML Servlet 映射.....490
15.7 訪問Scalatra Web 服務的GET 參數..........492
15.8 用Scalatra 處理POST 請求數據................494
15.9 創建一個簡單的GET 請求客戶端............497
15.10 嚮POST 鏈接發送JSON 數據.................501
15.11 獲取URL Headers .................................502
15.12 發送請求時設置鏈接的Headers............503
15.13 用Play 框架創建一個GET 請求的Web 服務..........................504
15.14 嚮Play 框架的web 服務POST JSON 數據507
第16 章數據庫和持久化........................................510
16.1 用JDBC 連接MySQL...............................511
16.2 用Spring Framework 連接數據庫............513
16.3 連接MongoDB 並且插入數據..................516
16.4 用insert,save 或者+= 把文檔插入到MongoDB .......................519
16.5 搜索一個MongoDB 集閤.........................521
16.6 更新MongoDB 集閤中的文檔..................525
16.7 獲取MongoDB 文檔ID.............................526
16.8 刪除MongoDB 集閤中的文檔..................527
16.9 快速瀏覽Slick........................................529
第17 章與Java 交互........................................531
17.1 與Java 集閤的轉換..................................531
17.2 給Scala 方法添加異常注解以便與Java 交互........................536
17.3 使用@SerialVersionUID 和其他注解.......538
17.4 使用Spring 框架......................................539
17.5 注解變長參數方法..................................542
17.6 當Java 的代碼需要JavaBeans ..................543
17.7 包裝特質的實現......................................547
第18 章簡單構建工具(SBT)....................................551
18.1 用SBT 創建一個項目目錄結構................551
18.2 用SBT 編譯、運行和打包一個Scala 項目555
18.3 用SBT 和ScalaTest 運行測試....................560
18.4 用SBT 管理依賴......................................562
18.5 控製所使用的可管理依賴的版本...........565
18.6 創建有子項目的項目..............................567
18.7 在Eclipse 中使用SBT...............................569
18.8 生成項目API 文檔...................................571
18.9 指定一個Main 類運行..............................572
18.10 使用GitHub 項目作為項目依賴.............574
18.11 告訴SBT 如何找到一個倉庫(使用Resolvers)........................575
18.12 通過SBT 堆棧跟蹤解決問題..................576
18.13 設置SBT 日誌等級................................577
18.14 部署一個單獨的、可執行的JAR 文件...578
18.15 發布類庫........................................581
18.16 用Build.scala 取代build.sbt....................582
18.17 在SBT 中使用Maven 倉庫的類庫...........584
18.18 用Ant 構建Scala 項目.............................586
第19 章類型..........589
19.1 創建使用泛型的類..................................591
19.2 創建一個接收簡單泛型的方法...............595
19.3 使用鴨子類型(結構化類型)...............596
19.4 讓可變集閤非變......................................598
19.5 讓不可變集閤協變..................................600
19.6 創建所有元素都是基本類型的集閤........602
19.7 給封閉模型選擇性添加新行為...............605
19.8 用類型構建功能......................................608
第20 章慣用法.......612
20.1 創建沒有副作用的方法(純函數)........613
20.2 選擇不可變對象......................................620
20.3 思考“麵嚮錶達式編程”.......................624
20.4 使用匹配錶達式和模式匹配...................627
20.5 從代碼中根除null 值................................630
20.6 使用Option/Some/None 模式..................634
· · · · · · (
收起)