scala - 函数式编程

scala函数式编程

1.foreach方法

1
2
3
4
// 遍历列表、数组
val list1 = (1 to 5).toList
// foreach方法
list1.foreach(println(_))

2.映射map

1
2
3
// 将结果整理成想要的
val list2 = list1.map("*" * _)
println("映射" + list2)

3.扁平化映射flatMap

1
2
3
4
// 将结果先进行映射然后进行扁平化
val list3 = List(("hkjcpdd hkjmjj hkjppp"), ("hkjcpdd hkjmjj hkjppp"))
val list4 = list3.flatMap(_.split(" "))
println("扁平化映射" + list4)

4.排序

1
2
3
4
5
6
7
8
9
10
// 传统排序sorted	如果需要反转在用完sorted之后reverse就好了
val list6 = List(3, 4, 1, 5, 0)
println("传统排序" + list6.sorted.rever

// 指定字段排序
val list7 = List("01 hadoop", "02 flume", "03 spark")
println("指定字段排序" + list7.sortBy(_.split(" ")(1))

// 自定义排序
println("自定义排序" + list1.sortWith((x, y) => x > y))

5.分组

1
2
3
4
5
// 分组
val list8 = List("刘德华" -> "男", "黄凯军" -> "男", "黄凯俊" -> "女" ,"黄凯君" -> "男")
val map1 = list8.groupBy(_._2)
val map2 = map1.map(x => x._1 -> x._2.size)
Console.println(map2)

6.聚合操作

1
2
3
4
5
6
7
8
9
10
11
// 聚合操作 reduce用来对集合元素进行聚合计算 fold用来对集合进行折叠计算
val list9 = (1 to 10).toList
// 使用reduce计算所有元素的和
Console.println("reduce聚合= " + list9.reduce((x, y) => x - y))
Console.println("reduceLeft聚合 = " + list9.reduceLeft((x, y) => x - y))
Console.println("reduceRight聚合 = " + list9.reduceRight((x, y) => x -y))

// fold与reduce很像,只不过多了一个指定初始值参数 100表示初始化值, 后面表示函数对象
Console.println("fold = " + list9.fold(100)((x, y) => x + y))
Console.println("foldLeft" + list9.foldLeft(100)(_ + _))
Console.println("foldRight" + list9.foldRight(100)(_ + _))

7.具体案例(学生成绩单)

1
2
3
4
5
6
7
8
9
10
// 学生成绩单
val listStu = List(("李四", 21, 89 ,43), ("王五", 56, 89, 98), ("赵柳", 66, 33, 55), ("黄凯君", 23, 54, 22))
// 获取所有语文成绩在60及以上的
val filterList = listStu.filter(_._2 >= 60)
println(filterList.map(_._1))
// 获取所有学生的总成绩
val SumList = listStu.map(x => x._1 -> (x._2 + x._3 + x._4))
println("所有学生的总成绩: " + SumList)
// 按照总成绩降序排列
println("按照总成绩进行排序" + SumList.sortWith((x, y) => x._2 < x._2))