package day02
/**
* 函数编程练习之常用方法
* reduce
* fold
* aggregate
* 交并差集
*/
object Exercise {
def main(args: Array[String]): Unit = {
// 创建一个List
val list0 = List(5,7,1,9,3,8,6,2,0,4)
//将lst0中每个元素乘以2后生成一个新的集合
val list1 = list0.map(_ * 2)
//将lst0中的偶数取出来生成一个新的集合
val list2 = list0.filter(_ % 2 == 0)
//将lst0排序后生成一个新的集合
val list3 = list0.sorted
//反转排序顺序
val list4 = list3.reverse
//将lst0中的元素4个一组,类型为Iterator[List[Int]]
val it = list0.grouped(4)
//将Iterator转换成list
val list5 = it.toList
//将多个list压扁成一个list
val list6 = list5.flatten
val lines = List("hello java hello scala","hello scala","hello python")
//先按空格切分,再压平
// val words = lines.map(_.split(" "))
// val flatWords = words.flatten
// val res = lines.flatMap(_.split(" "))
//并行计算求和
val arr = Array(1,2,3,4,5,6,7,8,9,10)
//和线程有关,每个线程计算一部分,( (1+2+3+4) + (5+6+7+8) +(9+10) )
// val res = arr.sum
// val res = arr.par.sum
//按照特定的顺序进行聚合
// (((1+2)+3)+4)+5....
// val res = arr.reduce(_+_)
// val res = arr.reduceLeft(_+_)
// 实现并行方式进行聚合
// val res = arr.par.reduce(_+_)
// val res = arr.par.reduce(_-_)
//折叠,有初始值(无特定顺序)
// val res = arr.par.fold(10)(_+_)
//折叠,有初始值(有特定顺序)
// val res = arr.foldLeft(10)(_+_)
// val res = arr.foldRight(10)(_+_)
// val res = arr.foldLeft(10)(_-_)
// val res = arr.par.foldLeft(10)(_-_)
//聚合
val list7 = List(List(1,2,3),List(3,4,5),List(2),List(0))
// val res = list7.flatten.reduce(_+_)
// val res = list7.aggregate(0)(_+_.sum,_+_)
val l1 = List(5,6,4,7)
val l2 = List(1,2,3,4)
//求并集
// val res = l1 union l2
//求交集
// val res = l1 intersect l2
//求差集
val res = l1 diff l2
println(res)
}
}
函数式编程练习之常用方法
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1、List的创建 Scala 列表类似于数组,它们所有元素的类型都相同,但是它们也有所不同:列表是不可变的,值一...
- 函数式接口使用背景 我们知道,java是一门面向对象编程语言,java中一切都是面向对象的(除了原始数据类型)。在...