/*
* 集合的高级计算(filter、map、flatten、flatMap、group、reudce、fold)
* 说明
* 1.map的元素类型为 二元元组 tp:(Any,Any)
* 2.map没有排序函数,如果排序,需要先转成list
* 1. 过滤
* 遍历集合并从中获取满足指定条件的元组,返回一个新集合
* 2. 转化/映射(map)
* 将集合中的每一个元素映射到指定函数
* map的元素类型是二元元组
* 3. 扁平化
* 将多个集合(多级嵌套)打散,合并成一个新集合
* 4. 扁平化+映射
* 5. 分组(group)
* 将元素按照传入的规则计算,计算结果为key,符合规则的结果存储到list为value,返回map
* 6. 简化(归约) - reduce
* 按照指定的规则,对集合内的元素进行聚合,从而减少数据,返回结果
* reduce = reduceLeft
* reduceRight
* fold方法
*
* */
/*
* 集合的高级计算(filter、map、flatten、flatMap、group、reudce、fold)
* 说明
* 1.map的元素类型为 二元元组 tp:(Any,Any)
* 2.map没有排序函数,如果排序,需要先转成list
* 1. 过滤
* 遍历集合并从中获取满足指定条件的元组,返回一个新集合
* 2. 转化/映射(map)
* 将集合中的每一个元素映射到指定函数
* map的元素类型是二元元组
* 3. 扁平化
* 将多个集合(多级嵌套)打散,合并成一个新集合
* 4. 扁平化+映射
* 5. 分组(group)
* 将元素按照传入的规则计算,计算结果为key,符合规则的结果存储到list为value,返回map
* 6. 简化(归约) - reduce
* 按照指定的规则,对集合内的元素进行聚合,从而减少数据,返回结果
* reduce = reduceLeft
* reduceRight
* fold方法
*
* */
object AdvanceCalculate extends App {
//初始化
var list = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
//1.过滤 - filter
//传入过滤规则
var list1 = list.filter(_ % 2 == 0)
println(list1)
//2.转化/映射(map)
//对集合中的每个元素都执行指定的函数,并返回新的集合
var list2 = list.map(x => x * x)
println(list2)
//3.扁平化 - flatten
//将多个集合(多级嵌套)打散,合并成一个新集合
var nestedList: List[List[Int]] = List(List(1), List(2), List(3, 4, 5), List(6, 7, 8))
var list3 = nestedList.flatten
println(list3)
//4.扁平化+映射 (打散)
var wordList: List[String] = List("hellow word", "helllow java", "helllow scala", "hello dawang", "helllo spark")
var list4 = wordList.flatMap(x => x.split(" "))
println(list4)
//5.分组
//按照首字母分组,首字母为key,符合规则的元素的list为value
var list5: Map[String, List[String]] = list4.groupBy(x => x.substring(0, 1))
println(list5)
//6.简化(归约) reduce
//var list = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
//前后两个值的计算规则 (从左往右计算)
def add(x: Int, y: Int) = x + y
def sub(x: Int, y: Int) = x - y
var result = list.reduce(add)
var result1 = list.reduce((x, y) => x - y) // (((1 - 2) - 3) -4)-5...
var result2 = list.reduceLeft((x, y) => x - y)
println(result)
println(result1)
println(result2)
//(从右往左计算)
var result3 = list.reduceRight(sub)
println(result3)
//7.fold方法 = 初始值 + reduce
var result4 = list.foldLeft(4)(add)
println(result4)
var result5 = list.foldRight(4)(sub)
println(result5)
}