大数据系列修炼-Scala课程10
今天主要是关于Scala中对List的相关操作,list在Scala中应该是至关重要,接下来会讲解关于List的一系列操作
List的map、flatMap、foreach、filter操作讲解
1.关于List的Map、flatMap操作、区别
2.对List的foreach、filter操作
//list中的Map中用一个函数表达式-->实则是对list进行操作,_可以表示一个函数或者表达式
List(1, 2, 3, 4, 6) map (_ + 1) //> res0: List[Int] = List(2, 3, 4, 5, 7)
val data = List("Scala", "Hadoop", "Spark") //> data : List[String] = List(Scala, Hadoop, Spark)
//计算List中元素的长度
data map (_.length) //> res1: List[Int] = List(5, 6, 5)
//把Lis元素转换为list并t倒置后又组成list输出
data map (_.toList.reverse.mkString) //> res2: List[String] = List(alacS, poodaH, krapS)
//把list中元素转换为list
data.map(_.toList) //> res3: List[List[Char]] = List(List(S, c, a, l, a), List(H, a, d, o, o, p), L
//flatMap把list元素转换为list后,再连接成新的list输出 //| ist(S, p, a, r, k)) data.flatMap(_.toList) //> res4: List[Char] = List(S, c, a, l, a, H, a, d, o, o, p, S, p, a, r, k)
//range是左臂右开的,[1,10) -->flatMap组成元素
List.range(1, 10) flatMap (i => List.range(1, i) map (j => (i, j)))
//> res5: List[(Int, Int)] = List((2,1), (3,1), (3,2), (4,1), (4,2), (4,3), (5,1
//| ), (5,2), (5,3), (5,4), (6,1), (6,2), (6,3), (6,4), (6,5), (7,1), (7,2), (7,
//| 3), (7,4), (7,5), (7,6), (8,1), (8,2), (8,3), (8,4), (8,5), (8,6), (8,7), (9
//| ,1), (9,2), (9,3), (9,4), (9,5), (9,6), (9,7), (9,8)) var sum = 0 //> sum : Int = 0
List(1, 2, 3, 4, 5) foreach (sum += _)
println("sum : " + sum) //> sum : 15
//filter过滤
println(List(1, 2, 3, 4, 6, 7, 8, 9, 10) filter (_ % 2 ==0))
//> List(2, 4, 6, 8, 10)
println(data filter (_.length == 5)) //> List(Scala, Spark)
List的partition、find、takeWhile、dropWhile、span、forall、exsists操作实现
1.关于Scala中List的partition、find、takeWhile、dropWhile实现
2.关于Scala中的span。forall、exsists实例讲解
//partition按照表达式进行拆分为两个list
println(List(1, 2, 3, 4, 5) partition (_ % 2 ==0))
//> (List(2, 4),List(1, 3, 5))
//find查找list中符合表达式的元素有几个
println(List(1, 2, 3, 4, 5) find (_ % 2 ==0)) //> Some(2)
println(List(1, 2, 3, 4, 5) find (_ <=0)) //> None
//takeWhile表示list满足表示式组成list
println(List(1, 2, 3, 4, 5) takeWhile (_ < 4))
//> List(1, 2, 3)
//dropWhile表示list中满足表达式形成新的list与其相反
println(List(1, 2, 3, 4, 5) dropWhile (_ < 4))
//> List(4, 5)
//span是上面两者的组合
println(List(1, 2, 3, 4, 5) span (_ < 4)) //> (List(1, 2, 3),List(4, 5))
//exists表示组成元素是否存在该表达式的元素-->如果有则返回true否则返回false
def hastotallyZeroRow(m: List[List[Int]]) = m exists (row => row forall (_ == 0))
//> hastotallyZeroRow: (m: List[List[Int]])Boolean
val m= List(List(1,0,0), List(0,1,0), List(0,0,1))
//> m : List[List[Int]] = List(List(1, 0, 0), List(0, 1, 0), List(0, 0, 1))
println(hastotallyZeroRow(m)) //> false
List的foldLeft、foldRight、sortWith操作实现
1.foldLeft、foldRight实例讲解
//foldLeft源码中可以看出定义了两个函数进行求和计算
def /:[B](z: B)(op: (B, A) => B): B = foldLeft(z)(op) def :\[B](z: B)(op: (A, B) => B): B = foldRight(z)(op) def foldLeft[B](z: B)(op: (B, A) => B): B = {
var result = z
this foreach (x => result = op(result, x))
result
}
2.sortWith实例讲解
//两个等价 从零开始相加
println((1 to 100).foldLeft(0)(_+_) ) //> 5050
println((0 /: (1 to 100))(_+_)) //> 5050
//从1到5进行相减
println((1 to 5).foldRight(100)(_-_)) //> -97
println(((1 to 5):\100)(_-_)) //> -97 //对list进行排序
println(List(1, -3, 4, 2, 6) sortWith (_ < _))//> List(-3, 1, 2, 4, 6)
List伴生对象操作方法实现讲解
1.关于List的apply、make、range实例讲解
2.unzip、flatten、contact、map2实例讲解
//List.apply()=List()
println(List(1, 2, 3)) //> List(1, 2, 3)
//List.make复制同样的元素
// List.make(3, 5)
//range 左闭右开
println(List.range(1, 5)) //> List(1, 2, 3, 4)
//计算间距为-3的元素
println(List.range(9, 1, -3)) //> List(9, 6, 3)
//abcde转换为list后进行组合
val zipped = "abcde".toList zip List(1, 2, 3, 4, 5)
//> zipped : List[(Char, Int)] = List((a,1), (b,2), (c,3), (d,4), (e,5))
println(zipped) //> List((a,1), (b,2), (c,3), (d,4), (e,5))
//把zipped转换为反向的
println(zipped.unzip) //> (List(a, b, c, d, e),List(1, 2, 3, 4, 5))
//fatter把list中的list转换为一个list
println(List(List('a', 'b'), List('c'), List('d', 'e')).flatten)
//把list组合转换为list //> List(a, b, c, d, e)
println(List.concat(List(), List('b'), List('c')))
//> List(b, c)
//map2两个list按照最后一个表达式进行计算
//println(List.map2(List(10, 20), List(10, 10)) (_ * _))
该内容都是从王家林老师教程中学习,他的微信号:18610086859
最新课程视频76讲:http://yun.baidu.com/s/1qWkPspm
该文章的地址35-38讲:http://pan.baidu.com/s/1qWxaAeC
大数据系列修炼-Scala课程10的更多相关文章
- 大数据系列修炼-Scala课程01
简介 由于本人刚毕业,也是从事软件开发相关的工作.想再学习一下关于大数据.移动互联网.云计算相关的技术.为我的未来打好基础.并且从零开始学习大数据相关的知识,脚踏实地的走好每一步,听行业前辈说毕业生刚 ...
- 大数据系列修炼-Scala课程07
由于昨天下班后有点困,就没有来及写博客,今天会把它补上!把这个习惯坚持下去! 关于Scala高阶函数详解 1.Scala高阶函数代码实现:高阶函数就是在我们函数中套用函数 2.高阶函数代码详解:高阶函 ...
- 大数据系列修炼-Scala课程06
关于Scala中的正则表达式与模式匹配结合的正则表达式Reg 正则表达式的实现:正则表达式的定义与其它语言差不多,只需在表达式后加一个.r,并且可以遍历相应的表达式进行匹配 //定义的正则表达式 va ...
- 大数据系列修炼-Scala课程03
前言 今天上班看了很多关于前端js,jQuery.bootstrap.js以及springMVC看得迷迷糊糊的,毕竟以前很少去学习前端的技术,所有看得有点困,还好看得比较多,回家后也开始学习关于Sca ...
- 大数据系列修炼-Scala课程04
Scala中继承实现:超类的构造.字段重写.方法重写 关于超类的构建:超类可以在子类没有位置的限制,可以在子类中调用父类的方法 类中字段重写:在重写字段前面加一个override就可以重新赋值 类中方 ...
- 大数据系列修炼-Scala课程02
Scala数组操作实战详解 接着昨天的课程,下面我们继续学习关于Scala数组操作详解.Scala数组的定义 //数组定义 //定长数组格式 /** * val arrayName = new Arr ...
- 大数据系列修炼-Scala课程08
接下来会讲解关于各种模式匹配,从中就会知道模式匹配的重要性 关于Type.Array.List.Tuple模式解析 1.Type模式匹配代码解析 //关于Type类型的模式匹配 //匹配 Int类型. ...
- 大数据系列修炼-Scala课程11
接着昨天的list,也是学习集合的相关知识 ListBuffer.ArrayBuffer.Queue.stack相关操作 1.ListBuffer.ArrayBuffer代码实现:ListBuffer ...
- 大数据系列修炼-Scala课程09
Option使用和实现内幕源码揭晓 1.Option中的sealed关键字解析:Option中用了sealed,定义的case class与case object必须在同一个文件中.Option在模式 ...
随机推荐
- Microsoft Visual C++ Runtime Library Runtime Error解决的方式
打开浏览器时,出现Microsoft Visual C++ Runtime Library Runtime Error错误,初步预计是软件冲突,可能有多种出错的方式,我的是浏览器自己主动关闭. 一. ...
- 模板引擎mustache.js
Javascript模板引擎mustache.js详解 阅读目录 1. 从一个简单真实的需求讲起 2. mustache的用法 3. mustache的思想 4. {{prop}}标签 5. {{ ...
- jquery处理页面元素
处理父级页面中的元素 $(parent.document).find('#hidSendPerson').val(val);$(parent.document).find('#btnGo').clic ...
- Leetcode:minimum_depth_of_binary_tree解决问题的方法
一. 称号 并寻求最深的二元相似.给定的二进制树.求其最小深度. 最小深度是沿从根节点,到叶节点最短的路径. 二. 分析 当我看到这个题目时.我直接将最深二叉树的代码略微改了下,把ma ...
- Android 深入解析光传感器(二)
光线传感器演示1 讲了一大堆的理论,那么以下的样例就来展示一下光线感应器的使用.为什么充分展现光感的用法,我这个样例写的很easy,仅仅写了使用光感必须的代码,然后用了几个textVie ...
- 一个小的日常实践——高速Fibonacci数算法
上得厅堂.下得厨房.写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:高速Fibonacci数算法 内容:先说说Fibonacci数列,它的定义是数列:f1,f2....fn有例如以下规律: ...
- window下自己主动备份数据库成dmp格式的bat写法
复制以下的命令到一个txt文本文档,然后改动相应的參数为自己须要的參数,一切完毕之后,将文件保存为bat格式. 这样每次须要备份的时候仅仅须要双击一下这个bat文件.其它的都不用你了,你仅仅须要静静的 ...
- Service Manager流程,派BC_REPLY,唤醒FregServer流程,返回BR_TRANSACTION_COMPLETE,睡眠等待proc->wait
本文參考<Android系统源代码情景分析>,作者罗升阳 一.service manager代码: -/Android/frameworks/base/cmd/service ...
- 嵌入在网页上Flash媒体播放器(1)
做的项目,在不久的将来相关的Flash玩家使用,需要播放视频的网页上,不同的视频资源,需要不同的球员.基于使用稳定性.的嵌入式和嵌入式复杂性能的优点概括起来有两种方式(不同的玩家),视频资源也略有不同 ...
- 相关Python分割操作
刚论坛python文本 http://bbs.byr.cn/#!article/Python/1693 攻克了一个关于python分片的问题. 问题: uesrList = ['1','2','3', ...