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. HDU 4729 An Easy Problem for Elfness (主席树,树上第K大)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题意:给出一个带边权的图.对于每一个询问(S , ...

  2. Mongo散记--聚合(aggregation)&amp; 查询(Query)

    mongo官网:http://www.mongodb.org/ 工作中使用到Mongo,可是没有系统的学习研究过Mongo,仅对工作过程中,在Mongo的使用过程中的一些知识点做一下记录,并随时补充, ...

  3. Tab Bar Controller和Navigation Controller混合使用详细教程

    在IPHONE上,NAV和TAB混合使用的案例很多.但很多书籍都没详细介绍这个是怎么使用的.我也找了很久才弄清楚怎么做.现在分享给大家. 1.先建立一个Window-based Application ...

  4. MVC5 Controller简要创建过程(1):ControllerFactory的创建

    即将离职,闲来无事回顾下MVC的源码,到了Controller创建这里,由于流程有点复杂,鉴于自己记性不太好,索性就记录一下吧,方便日后参照. 首先看MvcHandler: public class ...

  5. OC中最难的一部分内容:内存管理

    OC中最难的一部分内容:内存管理为什么说他难呢?因为内存如果需要我们程序员去管理的话,那个难度肯定是很大的,如果是Java,垃圾回收器会把这份工作给做了,我们不需要关心,但是就是因为如此,Androi ...

  6. [STL源码剖析]RB-tree的插入操作

    RB-tree的性质 对于RB-tree,首先做一个了解,先看一张维基百科的RB-tree: 再看RB-tree的性质: 性质1. 节点是红色或黑色. 性质2. 根是黑色,所有叶子都是黑色(叶子节点指 ...

  7. js、css、html判断浏览器的各种版本

    利用正则表达式来判断ie浏览器版本 判断是否IE浏览器 if (document.all) { alert("这个是ie浏览器");} 判断是否IE6浏览器 方法一:if ( /M ...

  8. jqeruy的append一个有趣的用法(挪移控件位置)

    使用:$(放置的容器).append($(需要迁移的控件)) 需求:列表中点击编辑可以在无刷修改 以前的方法是在列表中的每条数据直接放置控件.但是这个地区选择控件是服务器自定义控件不可以放置在列表的循 ...

  9. Android 数据库ORM框架GreenDao学习心得及使用总结<二>

    转:http://blog.csdn.net/xushuaic/article/details/24496191 第五篇 查询 查询会返回符合某些特定标准的实体.你可以使用原始的SQL定制查询语句,或 ...

  10. hdu 5654 xiaoxin and his watermelon candy 莫队

    题目链接 求给出的区间中有多少个三元组满足i+1=j=k-1 && a[i]<=a[j]<=a[k] 如果两个三元组的a[i], a[j], a[k]都相等, 那么这两个三 ...