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. Java主线程等待子线程、线程池

    public class TestThread extends Thread { public void run() { System.out.println(this.getName() + &qu ...

  2. Hadoop学习之编译eclipse插件

    近期准备開始学习Hadoop1.2.1的源码,感觉最好的方法还是能够在运行Hadoop及hadoop作业时跟踪调试代码的实际运行情况.因为选择的IDE为eclipse,所以准备编译一下hadoop的e ...

  3. Fedora 20忘记root密码

    1.忘记root密码的情况下.用sudo账户$sudo su就行了. 2.直接sudo passwd root就重置了roor密码了.

  4. Spring-----Spring Jar包

    转载自:http://blog.csdn.net/hekewangzi/article/details/51713110

  5. Rectangles

    Given two rectangles and the coordinates of two points on the diagonals of each rectangle,you have t ...

  6. Ubuntu12.04 配置Java开发环境:JDK1.7+Eclipse+Tomcat7.0

    软硬件环境 Ubuntu12.04+JDK1.7+Eclipse+Tomcat7.0 内容列表 1.安装JDK1.7,配置JAVA环境 2.安装Eclipse 3.安装Tomcat7.0 1.安装JD ...

  7. 点语法、property、self注意

    1.点语法(找出不合理的地方)#import <Foundation/Foundation.h>@interface Person : NSObject{    int _age;}- ( ...

  8. Get Intellisense for .axml files in Visual Studio

    原文Get Intellisense for .axml files in Visual Studio So in order to get some intellisense support for ...

  9. java 一致性哈希类实例 算法

    package com.hash; import java.util.Collection; import java.util.SortedMap; import java.util.TreeMap; ...

  10. JavaEE Tutorials (17) - Java消息服务示例

    17.1JMS示例概述23317.2编写简单的JMS应用233 17.2.1启动JMS提供者234 17.2.2创建JMS受管理对象234 17.2.3构建所有简单示例235 17.2.4发送消息23 ...