package edu.snnu.test

object list2 {
//把字符串转化成一个char类型的list
"99 Red Balloons".toList //> res0: List[Char] = List(9, 9, , R, e, d, , B, a, l, l, o, o, n, s) "99 Red Balloons".toList.filter(x => Character.isDigit(x))
//> res1: List[Char] = List(9, 9) "99 Red Balloons".toList.takeWhile(x => x != 'B')
//> res2: List[Char] = List(9, 9, , R, e, d, ) val c = List("x", "y", "z") //> c : List[String] = List(x, y, z)
c.map(x => x.toUpperCase) //> res3: List[String] = List(X, Y, Z) //上面的语句可以简写为下面形式,因为scala中有下划线作为通配符
c.map(_.toUpperCase()) //> res4: List[String] = List(X, Y, Z) val a = List(1, 2, 3, 4) //> a : List[Int] = List(1, 2, 3, 4)
a.filter(_%2 == 1) //> res5: List[Int] = List(1, 3) //对a这个list中的每个奇数元素加上10
a.filter(_%2 == 1).map(_+10) //> res6: List[Int] = List(11, 13) val q = List(a, List(4, 5, 6)) //> q : List[List[Int]] = List(List(1, 2, 3, 4), List(4, 5, 6))
q.map(x => x.filter(_%2 == 0)) //> res7: List[List[Int]] = List(List(2, 4), List(4, 6))
q.map(_.filter(_%2 == 0)) //> res8: List[List[Int]] = List(List(2, 4), List(4, 6)) //把有两个集合的集合中,内层中满足条件的元素变到一个list中
q.flatMap {_.filter(_%2 == 0)} //> res9: List[Int] = List(2, 4, 4, 6) }

柯里化案例:

(x: Int, y : Int) => x + y                      //> res0: (Int, Int) => Int = <function2>

  //def curriedAdd(a: Int)(b:Int)(c:Int)(d:Int) = a + b*c*d
def curriedAdd(a:Int,b:Int)(c:Int)(d:Int) = a + b*c*d
//> curriedAdd: (a: Int, b: Int)(c: Int)(d: Int)Int
//curriedAdd(2)(2)(2)(2) val addOne = curriedAdd(4,3)_ //> addOne : Int => (Int => Int) = <function1> val c = addOne(2)(3) //> c : Int = 22
println(addOne) //> <function1>

Map使用方法

package edu.snnu.test

object mapDemo {
println("Welcome to the Scala worksheet") //> Welcome to the Scala worksheet val p = Map(1 -> "David", 9 -> "Elwood", "rain" -> "明明")
//> p : scala.collection.immutable.Map[Any,String] = Map(1 -> David, 9 -> Elwoo
//| d, rain -> 鏄庢槑)
//通过key取map中对应的val
p(1) //> res0: String = David
p(9) //> res1: String = Elwood
p("rain") //> res2: String = 鏄庢槑 //contains方法用来判断某个key在不在map里面
p.contains(1) //> res3: Boolean = true p.contains(2) //> res4: Boolean = false //调用map变量的keys方法将会返回一个存储这个map所有key的list
p.keys //> res5: Iterable[Any] = Set(1, 9, rain)
//val叶同样
p.values //> res6: Iterable[String] = MapLike(David, Elwood, 鏄庢槑) //添加一个(key,value)到map中
val pp = p+(8->"Archer") //> pp : scala.collection.immutable.Map[Any,String] = Map(1 -> David, 9 -> Elwo
//| od, rain -> 鏄庢槑, 8 -> Archer)
p //> res7: scala.collection.immutable.Map[Any,String] = Map(1 -> David, 9 -> Elwo
//| od, rain -> 鏄庢槑) pp //> res8: scala.collection.immutable.Map[Any,String] = Map(1 -> David, 9 -> Elwo
//| od, rain -> 鏄庢槑, 8 -> Archer) //删除一个(key, value):map变量减去要删除的键值对的key即可
p-1 //> res9: scala.collection.immutable.Map[Any,String] = Map(9 -> Elwood, rain ->
//| 鏄庢槑)
p ++ List(2 ->"Alice", 5->"Bob") //> res10: scala.collection.immutable.Map[Any,String] = Map(5 -> Bob, 1 -> David
//| , 9 -> Elwood, rain -> 鏄庢槑, 2 -> Alice) p -- List(1, 9, 2, "rain") //> res11: scala.collection.immutable.Map[Any,String] = Map() p //> res12: scala.collection.immutable.Map[Any,String] = Map(1 -> David, 9 -> Elw
//| ood, rain -> 鏄庢槑)
p ++ List(2 ->"Alice", 5->"Bob") -- List(9, 1, "rain")
//> res13: scala.collection.immutable.Map[Any,String] = Map(5 -> Bob, 2 -> Alice
//| ) }

快速排序小案例

package edu.snnu.test

object qSort {
println("Welcome to the Scala worksheet") //> Welcome to the Scala worksheet def qSort(a:List[Int]):List[Int] = {
if(a.length < 2) a
else
qSort(a.filter(_<a.head)) ++
a.filter(_ == a.head) ++
qSort(a.filter(_>a.head))
} //> qSort: (a: List[Int])List[Int] val l = List(1, 2, 3, 4, 5, 9, 8, 7, 6) //> l : List[Int] = List(1, 2, 3, 4, 5, 9, 8, 7, 6)
qSort(List(4, 3, 2, 6, 7, 8, 9)) //> res0: List[Int] = List(2, 3, 4, 6, 7, 8, 9)
qSort(l) //> res1: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9) }

range的使用

package edu.snnu.test

object Range {
println("Welcome to the Scala worksheet") //> Welcome to the Scala worksheet 1 to 10 //> res0: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7,
//| 8, 9, 10)
1 to 10 by 2 //> res1: scala.collection.immutable.Range = Range(1, 3, 5, 7, 9) (1 to 10).toList //> res2: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 1 until 10 //> res3: scala.collection.immutable.Range = Range(1, 2, 3, 4, 5, 6, 7, 8, 9) //也就是说to上届是一个闭区间 ,until上界是一个闭区间
val s = 1 #::2 #:: 3 #::Stream.empty
//> s : <error> = Stream(1, ?)
}

reduceLeft以及foldleft规约的使用

package edu.snnu.test

object reduceLeft {
//reduceLeft是一种规约方法
val a = List(1, 2, 3, 4) //> a : List[Int] = List(1, 2, 3, 4)
//map的返回值和原来的值的类型是一样的,flatMap会把两层的map转化为一层的map
a.reduceLeft((x, y) => x + y) //> res0: Int = 10
//简写方式,用两个下划线来代替这两个参数
a.reduce(_+_) //> res1: Int = 10 //foldleft也是一种规约方法
a.foldLeft(1)(_+_) //> res2: Int = 11
a.foldLeft(2)(_*_) //> res3: Int = 48
}

懒加载

package edu.snnu.test

object StreamDemo {
println("Welcome to the Scala worksheet") //> Welcome to the Scala worksheet //懒加载,在用的时候求值,按需求值
//val a = 1 #:: 2 #:: 3 #:: Stream.empty //val stream = (1 to 10000000).toStream() }

List的使用

package edu.snnu.test

object test1 {
println("Welcome to the Scala worksheet") //> Welcome to the Scala worksheet val a = List(1, 2, 3, 4) //> a : List[Int] = List(1, 2, 3, 4) //把0添加到刚才的list里面,两个冒号为连接操作符,连接操作符的左边是成员,右边是一个list
val b = 0::a //> b : List[Int] = List(0, 1, 2, 3, 4) val c = "x"::"y"::"z"::Nil //> c : List[String] = List(x, y, z) //生成一个list(z)
"z"::Nil //> res0: List[String] = List(z) //三个毛冒号的连接操作符用于连接两个list
a:::c //> res1: List[Any] = List(1, 2, 3, 4, x, y, z) //list的head方法返回当前list的第一个元素
a.head //> res2: Int = 1
b.head //> res3: Int = 0
c.head //> res4: String = x //list的tail方法返回当前list里除了第一个元素外的所有元素组成的list,这样的列表我们称为尾列表
a //> res5: List[Int] = List(1, 2, 3, 4)
a.tail //> res6: List[Int] = List(2, 3, 4)
b //> res7: List[Int] = List(0, 1, 2, 3, 4)
b.tail //> res8: List[Int] = List(1, 2, 3, 4) a.isEmpty //> res9: Boolean = false Nil //> res10: scala.collection.immutable.Nil.type = List()
Nil.isEmpty //> res11: Boolean = true def walkthru(l:List[Int]) :String = {
if(l.isEmpty) ""
else {
println(l.tail)
l.head.toString+""+walkthru(l.tail) }
} //> walkthru: (l: List[Int])String walkthru(List(1,2,3,4,5)) //> List(2, 3, 4, 5)
//| List(3, 4, 5)
//| List(4, 5)
//| List(5)
//| List()
//| res12: String = 12345 //对list a进行过滤,如果里面的元素x满足x%2 == 1,那么保留下来,否则就删除
a.filter(x => x%2 == 1) //> res13: List[Int] = List(1, 3)
}

tuple的使用

package edu.snnu.test

object tuple {

  1 -> 2                                          //> res0: (Int, Int) = (1,2)

  //定义一个tuple
val t = (1, "Alice", "Math", 95,5) //> t : (Int, String, String, Int, Int) = (1,Alice,Math,95,5) //获得tuple t的第一个成员
t._1 //> res1: Int = 1
//获得tuple t的第二个成员
t._2 //> res2: String = Alice
//第三个
t._3 //> res3: String = Math //函数的返回值一般都只有一个值,如果有多个值的话我们就可以把这多个值封装在一个tuple里, val a = List(1, 2, 3, 4) //> a : List[Int] = List(1, 2, 3, 4) //(Int, Int, Int)代表返回值是一个三个int数据的list
def sumSq(in: List[Int]):(Int,Int,Int) = {
//下面t代表(0, 0, 0)这个元组,v代表这个list中的每一个值
in.foldLeft((0,0,0))((t,v) => (t._1 + 1, t._2+v, t._3+v*v))
} //> sumSq: (in: List[Int])(Int, Int, Int) sumSq(a) //> res4: (Int, Int, Int) = (4,10,30) }

大数据之scala基本语法学习的更多相关文章

  1. 大数据之scala高级语法学习

    协变 案例一: class Animal {} class Bird extends Animal {} class Animal {} class Bird extends Animal {} // ...

  2. 【大数据】Scala学习笔记

    第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java  以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...

  3. 《Hadoop大数据架构与实践》学习笔记

    学习慕课网的视频:Hadoop大数据平台架构与实践--基础篇http://www.imooc.com/learn/391 一.第一章 #,Hadoop的两大核心:     #,HDFS,分布式文件系统 ...

  4. GIS-"地理空间大数据与AI的碰撞"学习笔记

    1.关系 人工智能>机器学习>神经网络>深度学习 2.机器学习-两个过程 训练/学习过程:样本数据.学习器.模型参数 测试/预测过程:预测.预测值 3.神经网络 机器学习模拟人脑神经 ...

  5. 大数据萌新的Python学习之路(一)

    笔记开始简介 从2018年9月份正式进入大学的时代,大数据和人工智能的崛起让我选择了计算机专业学习数据科学与大数据技术专业,接触的第一门语言就是C语言,后来因为同学推荐的原因进入了学校的人工智能研究协 ...

  6. 大数据萌新的Python学习之路(二)

    笔记内容: 一.模块 Python越来越被广大程序员使用,越来越火爆的原因是因为Python有非常丰富和强大标准库和第三方库,几乎可以实现你所想要实现的任何功能,并且都有相应的Python库支持,比如 ...

  7. 【阿里云-大数据】阿里云DataWorks学习视频汇总

    阿里云DataWorks学习视频汇总 注意:本文档中引用的视频均来自阿里云官方的帮助文档,本文档仅仅是汇总整理,方便学习. 阿里云DataWorks帮助文档链接:https://help.aliyun ...

  8. Scala基本语法学习笔记

      Scala语法与JAVA有很多相似的地方,两者也可以相互调用.但是整体感觉Scala语法等简洁.灵活.这里记录下Scala有特点的地方,以备以后查找方便.   参考: 使用 import: htt ...

  9. Scala基础语法学习(一)

    1. val和var的区别 val定义的是一个常量,无法改变其内容 scala> val s = 0 s: Int = 0 scala> s = 2 <console>:12: ...

随机推荐

  1. 我的RTOS 之六 -- Touch移植(s5pv210+threadx+ucgui+touch)

    非常久没有关注RTOS了,所以也一直没有更新.近期闲了,把GPIO I2C调通了.简单移植了Touch.在S5PV210上使用. 调试I2C时.废了非常多周折,最后借助示波器才发现一个小小的错误.折腾 ...

  2. MediaChooser图库浏览器

    MediaChooser Android库 MediaChooser是一个库,浏览并选择视频和图像从SD卡.它可以用来显示文件中查看图像和视频(显示所有文件)或文件夹视图(显示文件分类).项目按日期, ...

  3. JS 精粹(三)

    (一)基本问题 JS的数据类型(不是数据结构)分:简单数据类型(undefined\null\boolean\string\number\symbol).复杂数据类型(object). 对象是可变的键 ...

  4. puts fputs printf的区别

    puts()显示字符串时自动在其后添加一个换行符,函数里的参数是一个地址,从该地址向后面输出,直到遇到空字符,所以要确保输出的字符串里要有空字符.与gets()函数一起使用. fputs()需要第二个 ...

  5. svn服务器配置小记

    在这里/opt/svndata/repos1创建svn版本库svnadmin create /opt/svndata/repos1 创建成功后会在/opt/svndata/repos1目录下生成con ...

  6. Js中 关于top、clientTop、scrollTop、offsetTop等

    网页可见区域宽: document.body.clientWidth;网页可见区域高: document.body.clientHeight;网页可见区域宽: document.body.offset ...

  7. Python进阶之闭包

    闭包 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB","S ...

  8. HTML5 canvas入门

    HTML5 Canvas入门 <canvas> 标签定义图形,比如图表和其他图像,您必须使用脚本来绘制图形.在画布上(Canvas)画一个红色矩形,渐变矩形,彩色矩形,和一些彩色的文字. ...

  9. javaEE简答题整理

    1. 什么是JavaEE?其编程思想是什么? JavaEE是一个标准的中间件体系结构,是企业分布式应用开发标准.JavaEE的编程思想是组件—容器. 2. 为什么提出JavaEE体系结构? (1)为满 ...

  10. xampp环境安装swoole

    手动编译php运行环境经常遇到函数库依赖的问题,这个错误搞定了,又蹦出来那个错误,很棘手,为了快速搭建一个swoole开发环境,于是另辟蹊径,直接下载安装xampp for linux,然后在用xam ...