scala是一門函數式編程語言,函數被做爲一等公民,能夠做爲參數進行傳遞。html
讓咱們看一下計算fibonacci函數的scala代碼java
def fino(n: Int): Int = { if(n == 1 || n == 0) 1 else fino(n-1) + fino(n-2) } fino(3)
groupBy在scala.collection.Traversable中定義編程
def groupBy[K](f: (A) ⇒ K): immutable.Map[K, Traversable[A]]
將List中的tuple按第一個元素進行歸類。api
scala> val a = List(("h", "s"), ("h", "s"), ("l", "aa"), ("s", "mi")) a: List[(String, String)] = List((h,s), (h,s), (l,aa), (s,mi)) scala> a.groupBy(_._1) res0: scala.collection.immutable.Map[String,List[(String, String)]] = Map(h -> List((h,s), (h,s)), s -> List((s,mi)), l -> List((l,aa)))
map對collection中的每一個元素apply function f,返回一個新的collection。app
def map[B](f: (A) ⇒ B): Traversable[B]
對兩個Map按key值作聚合,返回一個新的Map:k-> (a.value, b.value.size)。編程語言
val a = Map("h" -> 1, "j" -> 2) val b = Map("h" -> Set(2, 3), "j" -> Set(4, 5, 6)) val c = a.map{case(k, v) => k -> (v, b.getOrElse(k, Set.empty).size)}
對兩個map作鏈接操做,好比:函數式編程
val a = Map("Lucy" -> 101, "Lilei" -> 102) val b = Map(101 -> "female", 102 -> "male") val c = a.map{ case(k,v) => k-> (v, b.getOrElse(v, "EMPTY"))}
將java的HashMap轉成scala的Map函數
val a = new java.util.HashMap[String, Map[String, Int]]() a.put("he", Map("tag" -> 102)) a.put("fei", Map("tag" -> 103)) import scala.collection.JavaConverters._ a.asScala.toMap[String, Map[String, Int]]