package cn.itcast.collect

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

//将list0中的每一个元素乘以10后生成一个新的集合
val list1=list0.map(x=>x*10)
println("list1==== "+list1)

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

//将list0排序后生成一个新的集合
val list3=list0.sorted
val list4=list0.sortBy(x=>x)
val list5=list0.sortWith((x,y)=>x<y)
println("list3==== "+list3)
println("list4==== "+list4)
println("list5==== "+list5)

//反转顺序
val list6=list3.reverse
println("list6==== "+list6)

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

//将Iterator转换成List
val list8=list7.toList
println("list8==== "+list8)

//将多个list压扁成一个List
val list9=list8.flatten
println("list9==== "+list9)

val lines = List("hello tom hello jerry", "hello jerry", "hello kitty")
//先按空格切分,在压平
val result1=lines.flatMap(_.split(" "))
println("result1==== "+result1)

//并行计算求和
val result2=list0.par.sum
println("result2==== "+result2)

//化简:reduce
//将非特定顺序的二元操作应用到所有元素
val result3=list0.reduce((x,y) => x + y)
还可以这么写: val result3=list0.reduce(_+_) 第一个下划线表示累加后的结果,第二个表示集合中的下一个元素
println("result3==== "+result3)

//按照特定的顺序
val result4 = list0.reduceLeft(_+_)
val result5= list0.reduceRight(_+_)
println("result4==== "+result4)
println("result5==== "+result5)

//折叠:有初始值(无特定顺序)
val result6 = list0.fold(100)((x,y)=>x+y)
println("result6==== "+result6)

//折叠:有初始值(有特定顺序)
val result7 = list0.foldLeft(100)((x,y)=>x+y)
println("result7==== "+result7)

//聚合
val list10= List(List(1, 2, 3), List(4, 5, 6), List(7,8), List(9,0))
val result8 = list10.par.aggregate(10)(_+_.sum,_+_)
println("result8==== "+result8)

//获取到参与并行计算的线程
println(list10.par.collect{
case _=>Thread.currentThread().getName
}.distinct)

val l1 = List(5,6,4,7)
val l2 = List(1,2,3,4)
//求并集
val r1=l1.union(l2)
println("r1=== "+r1)

//求交集
val r2=l1.intersect(l2)
println("r1=== "+r2)

//求差集
val r3=l1.diff(l2)
println("r3=== "+r3)

reduceLeft(op), reduceLeft(op),
foldLeft(init)(op), foldRight(init)(op)
是将操作应用到同一集合的相邻元素
定义 val list = List(1,2,3,4)
运算 list.reduceLeft(_-_)
运算 list.reduceRight(_-_)   // 源码中的运算步骤为: 1-(2-(3-4)) = -2
运算 list.foldLeft(0)(_-_)
运算 list.foldRight(0)(_-_)  // 源码中的运算步骤为: 1-(2-(3-(4-0))) = -2

}

}

最新文章

  1. 理解SVG的viewport,viewBox,preserveAspectRatio
  2. ORA-12899: value too large for column (actual: 27, maximum: 20)
  3. 随堂笔记javascript篇之chrome调试:
  4. AngularJs $location 和 $window
  5. xcode6 ios launchimage
  6. C/C++学习之路
  7. [改善Java代码]不使用stop方法停止线程
  8. $http.post发的数据,后台取不到两种解决方案
  9. Python根据上下限生成不重复随机数1
  10. Python操作Redis的5种数据类型
  11. CentOS 添加常用 yum 源
  12. Raneto中文搜索支持
  13. UVA548 tree的思路
  14. AGC002 F - Leftmost Ball
  15. 使用rt-thread中BSP-stm32 ENV构建工具报错
  16. Hadoop Streaming开发要点
  17. PHP之十六个魔术方法
  18. 涨姿势:Java 异常?尝试自定义异常
  19. IOS - 执行时 (经常使用函数)
  20. 基于bootstrap模态框的日期选择器

热门文章

  1. canvas的描述
  2. 4500-X启动到“511K bytes of non-volatile configuration memory”,无法继续?
  3. 我来给你讲清楚Pythony广播
  4. js分享微信 ,微博 ,qq空间
  5. C语言:将ss所指字符串中所有下标为奇数位上的字母转换成大写,若不是字母,则不转换。-删除指针p所指字符串中的所有空白字符(包括制表符,回车符,换行符)-在带头结点的单向链表中,查找数据域中值为ch的结点,找到后通过函数值返回该结点在链表中所处的顺序号,
  6. 解决:jenkins jnlp安装 provided port 40127 is not reachable
  7. bitnami-redmine 一键安装
  8. $ git push -u origin master
  9. 9000端口号被上一个ip地址占用,需要reboot才可以恢复正常ip端口问题
  10. ubuntu 虚拟机添加多个站点