scala是一门函数式编程语言,函数被作为一等公民,可以作为参数进行传递。
让我们看一下计算fibonacci函数的scala代码
def fino(n: Int): Int = {
if(n == 1 || n == 0) 1 else fino(n-1) + fino(n-2)
}
fino(3)
collection的API
groupBy
groupBy在scala.collection.Traversable中定义
def groupBy[K](f: (A) ⇒ K): immutable.Map[K, Traversable[A]]
将List中的tuple按第一个元素进行归类。
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
map对collection中的每个元素apply function f,返回一个新的collection。
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互操作
将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]]
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。