您的位置:首页 > 其它

Scala初学小练习

2018-01-16 16:53 190 查看
package cn.allengao.exercise

object Exercise {
def main(args: Array[String]): Unit = {
//创建一个List
val list0 = List(2, 5, 9, 6, 7, 1, 8, 3, 4, 0)

//将list0中的每个元素乘以2后生成一个新的集合
// “_” 表示将list0中的每一个元素取出。ctrl+alt+v 快捷键生成局部变量。ctrl+alt+L格式化快捷键
val list1 = list0.map(_ * 2)

//将list0中的偶数取出来生成一个新的集合
val list2 = list0.filter(_ % 2 == 0)

//将list0排序后生成一个新的集合
val list3 = list0.sorted

//反转排序顺序
val list4 = list3.reverse

//将list0中的元素4个一组,类型为Iterator[List[Int]]
val itr = list0.grouped(4)

//将Iterator转换成一个List
val list5 = itr.toList

//将多个List压扁成一个List
val list6 = list5.flatten

//先按空格切分,再压平
val lines = List("hello java ", "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)

//    val res1 = arr.sum
//和线程有关,会每个线程计算一部分,例如:((1+2+3+4)+(5+6+7+8)+(9+10))
val res1 = arr.par.sum

//按照特定的顺序进行聚合
//第一个_代表拿取到的第一个元素,第二个_代表拿取到的第二个元素,内部循环,
// 下次再循环用上次的中间结果再加下一个值。(reduce调用了reduceLeft方法)
//(((1+2)+3)+4)+5...... 实现过程
val res2 = arr.reduce(_ + _)

//    val res3 = arr.reduceLeft(_+_)
//    val res4 = arr.reduceRight(_+_)
//    val res5 = arr.par.reduce(_+_)     //并行执行,如果执行减(_-_),每次的结果是不一样的。

//ctrl+d 快捷键复制上一行
//折叠:有初始值(无特定顺序)
val res6 = arr.fold(0)(_ + _) //聚合时要将初始值累加进去
val res7 = arr.par.fold(10)(_ + _) //并行执行,初始值每个线程都加10,每次运行结果不一样。

//折叠:有初始值(有特定顺序)
val res8 = arr.foldLeft(10)(_ + _)
val res9 = arr.foldRight(10)(_ + _)

val res10 = arr.foldLeft(10)(_ - _)
//该语句中每次运行结果都一样,是-45,因为foldLeft左折叠优先,从左向右顺序运行,par可以省略。
val res11 = arr.par.foldLeft(10)(_ - _)

//聚合
val list7 = List(List(1,2,3),List(3,4,5),List(2),List(0))

val res12 = list7.flatten.reduce(_+_)
//第一个参数,第一个_表示括号内的初始值,第二个_表示每一个小的List,.sum表示每个小的List局部聚合。
//第二个参数,表示全局聚合。
val res13 = list7.aggregate(0)(_+_.sum,_+_)

val l1 = List(5,6,4,7)
val l2 = List(1,2,3,4)
//求并集
val res14 = l1 union l2
//求交集
val res15 = l1 intersect l2
//求差集
val res16 = l1 diff l2
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: