IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]一天一段scala代码(十三)

    linger2012liu发表于 2015-04-03 20:06:58
    love 0
    一天一段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



沪ICP备19023445号-2号
友情链接