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]]

lifehack
134 声望6 粉丝

引用和评论

0 条评论