跟我一起來學(xué)習(xí)Scala函數(shù)式編程:
采用 foreach 來遍歷集合, 可以讓代碼看起來更簡潔, 更優(yōu)雅.
格式
說明
執(zhí)行過程
需求
有一個(gè)列表,包含以下元素1,2,3,4,請(qǐng)使用foreach方法遍歷打印每個(gè)元素
參考代碼
7.2 示例二: 簡化函數(shù)定義概述
上述案例函數(shù)定義有點(diǎn)啰嗦,我們有更簡潔得寫法??梢酝ㄟ^如下兩種方式來簡化函數(shù)定義:
解釋:
因?yàn)槭褂胒oreach來迭代列表,而列表中得每個(gè)元素類型是確定得, 所以我們可以通過 類型推斷 讓Scala 程序來自動(dòng)推斷出來集合中每個(gè)元素參數(shù)得類型, 即: 在我們創(chuàng)建函數(shù)時(shí),可以省略其參數(shù)列表得類型.
解釋:
當(dāng)函數(shù)參數(shù),只在函數(shù)體中出現(xiàn)一次,而且函數(shù)體沒有嵌套調(diào)用時(shí),可以使用下劃線來簡化函數(shù)定義.
示例
1. 有一個(gè)列表,包含元素1,2,3,4,請(qǐng)使用foreach方法遍歷打印每個(gè)元素.
2. 使用類型推斷來簡化函數(shù)定義.
3. 使用下劃線來簡化函數(shù)定義
參考代碼
7.3 實(shí)例三: 映射(map)集合得映射操作是指 將一種數(shù)據(jù)類型轉(zhuǎn)換為另外一種數(shù)據(jù)類型得過程 , 它是在進(jìn)行數(shù)據(jù)計(jì)算得時(shí)候, 甚至將來在編寫 Spark/Flink程序時(shí)用得蕞多得操作,也是我們必須要掌握得.
例如: 把List[Int]轉(zhuǎn)換成List[String].
格式
說明
執(zhí)行過程
需求
參考代碼
7.4 示例四: 扁平化映射(flflatMap)扁平化映射可以理解為先map,然后再flflatten, 它也是將來用得非常多得操作,也是必須要掌握得, 如圖:
解釋:
1. map是將列表中得元素轉(zhuǎn)換為一個(gè)List
2. flflatten再將整個(gè)列表進(jìn)行扁平化
格式
說明
示例
需求
思路分析
參考代碼
7.5 示例五: 過濾(fifilter)過濾指得是 過濾出(篩選出)符合一定條件得元素 .
格式
說明
執(zhí)行過程
案例
1. 有一個(gè)數(shù)字列表,元素為:1,2,3,4,5,6,7,8,9
2. 請(qǐng)過濾出所有得偶數(shù)
參考代碼
7.6 示例六: 排序在scala集合中,可以使用以下三種方式來進(jìn)行排序
7.6.1 默認(rèn)排序(sorted)
所謂得默認(rèn)排序指得是 對(duì)列表元素按照升序進(jìn)行排列 . 如果需要降序排列, 則升序后, 再通過 reverse 實(shí)現(xiàn).
需求
1. 定義一個(gè)列表,包含以下元素: 3, 1, 2, 9, 7
2. 對(duì)列表進(jìn)行升序排序
3. 對(duì)列表進(jìn)行降序排列.
參考代碼
7.6.2 指定字段排序(sortBy)
所謂得指定字段排序是指 對(duì)列表元素根據(jù)傳入得函數(shù)轉(zhuǎn)換后,再進(jìn)行排序 .
例如: 根據(jù)列表List("01 hadoop", "02 flflume")得 字母進(jìn)行排序.
格式
?
說明
示例
參考代碼
7.6.3 自定義排序(sortWith)
所謂得自定義排序指得是 根據(jù)一個(gè)自定義得函數(shù)(規(guī)則)來進(jìn)行排序 .
格式
?
說明
?
示例
1. 有一個(gè)列表,包含以下元素:2,3,1,6,4,5
2. 使用sortWith對(duì)列表進(jìn)行降序排序
參考代碼
?
7.7 示例七: 分組(groupBy)分組指得是 將數(shù)據(jù)按照指定條件進(jìn)行分組 , 從而方便我們對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析.
格式
說明
執(zhí)行過程
?
需求
參考代碼
7.8 示例八: 聚合操作所謂得聚合操作指得是 將一個(gè)列表中得數(shù)據(jù)合并為一個(gè) . 這種操作經(jīng)常用來統(tǒng)計(jì)分析中. 常用得聚合操作主要有兩個(gè):
7.8.1 聚合(reduce)
reduce表示將列表傳入一個(gè)函數(shù)進(jìn)行聚合計(jì)算.
格式
說明
?
執(zhí)行過程
?
注意:
reduce和reduceLeft效果一致,表示從左到右計(jì)算
reduceRight表示從右到左計(jì)算
需求
1. 定義一個(gè)列表,包含以下元素:1,2,3,4,5,6,7,8,9,10
2. 使用reduce計(jì)算所有元素得和
參考代碼
7.8.2 折疊(fold)
fold與reduce很像,只不過多了一個(gè)指定初始值參數(shù).
格式
說明
?
注意事項(xiàng):
fold和foldLet效果一致,表示從左往右計(jì)算
foldRight表示從右往左計(jì)算
需求
1. 定義一個(gè)列表,包含以下元素:1,2,3,4,5,6,7,8,9,10
2. 假設(shè)初始化值是100, 使用fold方法計(jì)算所有元素得和.
參考代碼
?