一天一段scala代码(十三)

为了更好的驾驭spark,最近在学习scala语言特性,主要看《快学scala》,顺便把一些自己认为有用的代码记下来。

package examples

object Example13 extends App{

//可变集合和不可变集合

  val iMap = scala.collection.immutable.Map("1"->2,"2"->2)
  println(iMap)
  println(iMap+("3"->3))//新创建一个map,并加上一个元素. 没有 +=函数
  println(iMap)

  val mMap = scala.collection.mutable.Map("1"->2,"2"->2)
  println(mMap)
  println(mMap+=("3"->3))//改变原来的map,并返回新的map
  println(mMap)

  //集合有很多方法,用IDE开发有提示,比较方便
  //举例:reduceLeft,scanLeft,getOrElse

  val partial_function_res = "-3+4".collect{case '+' =>1;case '-' => -1;}
  println(partial_function_res)

  //拉链操作
  val names=List("linger","angel")
  val ages=List("25","24")
  println(names zip ages)

  //遍历操作可以用iterator

  //赖视图
  import scala.math._
  val powers = (1 until 1000).view.map(pow(10,_))
  //并不会马上执行计算.类似spark的rdd的transform

  powers(99)//会执行计算 pow(10,99) 

  //赖视图如果加上force,则会强制进行计算,比如
  (1 until 2).view.map(pow(10,_)).force

  //赖视图的还有一个好处,就是如果集合进行多次变换,则可以省去产生中间结果
  (1 until 2).view.map(pow(10,_)).map (1/_).force

  //平常我们用到的集合都是非线程安全的,scala有一些线程安全的特质,可以混入那些结合,使其线程安全.
  //另外,还可以使用java.util.concurrent的线程安全的集合

}

输出

Map(1 -> 2, 2 -> 2)
Map(1 -> 2, 2 -> 2, 3 -> 3)
Map(1 -> 2, 2 -> 2)
Map(2 -> 2, 1 -> 2)
Map(2 -> 2, 1 -> 2, 3 -> 3)
Map(2 -> 2, 1 -> 2, 3 -> 3)
Vector(-1, 1)
List((linger,25), (angel,24))

本文作者:linger

本文链接:http://blog.csdn.net/lingerlanlan/article/details/44859175

时间: 2024-12-19 17:59:06

一天一段scala代码(十三)的相关文章

一天一段scala代码(五)

一天一段scala代码(四) 为了更好的驾驭spark,最近在学习scala语言特性,主要看<快学scala>,顺便把一些自己认为有用的代码记下来. package examples class Person { val publicVal = 1 //自动生成getter var publicVar = 2 //自动生成getter和setter //自定义getter和setter private var privateAge=0 def age = privateAge //getter

一天一段scala代码(十四)

为了更好的驾驭spark,最近在学习scala语言特性,主要看<快学scala>,顺便把一些自己认为有用的代码记下来. package examples object Example14 extends App{ var ch='9' var sign= ch match{ case '+' => 1 case '-' => -1 case _ if Character.isDigit(ch) => Character.digit(ch,10) //守卫模式,加上条件 cas

一天一段scala代码(十一)

为了更好的驾驭spark,最近在学习scala语言特性,主要看<快学scala>,顺便把一些自己认为有用的代码记下来. package examples class Fraction(n:Int,d:Int) { private val num =n private val den=d def *(other:Fraction) = new Fraction(num*other.num,den*other.den) //重载称号操作符 } object Fraction { def apply

一天一段scala代码(四)

为了更好的驾驭spark,最近在学习scala语言特性,主要看<快学scala>,顺便把一些自己认为有用的代码记下来. package examples object Example4 { def main(args: Array[String]) { //不可变Map val scores= scala.collection.immutable.Map("linger"->1,"angela"->2) //scores+=("la

一天一段scala代码(三)

为了更好的驾驭spark,最近在学习scala语言特性,主要看<快学scala>,顺便把一些自己认为有用的代码记下来. package examples import scala.collection.mutable.ArrayBuffer object Example3 { def main(args: Array[String]) { val start = System.currentTimeMillis println("took " + (System.curre

一天一段scala代码(二)

为了更好的驾驭spark,最近在学习scala语言特性,主要看<快学scala>,顺便把一些自己认为有用的代码记下来. package examples import scala.util.control.Breaks._ object Example2 { def main(args: Array[String]) { //if else 语法 val s = if(1==1) 1 else 0 println(s) //代码块 val d = { val s=1+1 val g = s*2

一天一段scala代码(九)

为了更好的驾驭spark,最近在学习scala语言特性,主要看<快学scala>,顺便把一些自己认为有用的代码记下来. package examples import scala.io.Source object Example9 extends App { val source = Source.fromFile("/home/linger/data/hive_data","UTF-8") val lines = source.getLines() f

一天一段scala代码(七)

为了更好的驾驭spark,最近在学习scala语言特性,主要看<快学scala>,顺便把一些自己认为有用的代码记下来. package examples class Angela { //包可见性 这里规定了这个方法只能再examples包内可见 //当时在spark的mllib做二次开发时遇到这个坑,mllib有些函数是包可见的,其他包访问不了. //解决方法是将自己的程序起名跟那些函数所在的包一致,比如org.apache.spark.mllib.xxxx,这样就可以访问mllib的一些类

一天一段scala代码(六)

为了更好的驾驭spark,最近在学习scala语言特性,主要看<快学scala>,顺便把一些自己认为有用的代码记下来. package examples class Account { val id = Account.getUnique()//访问这个类的伴生对象 } object Account //上面类的伴生对象 里面的成员类似c++中类的静态成员 . 如果只定义了这个对象,没有定义上面的类,则对象就是单例对象了. { private var id=0 def getUnique()=