一天一段scala代碼(十三)

一天一段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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章