转换集合
操作 | 实例 | 描述 |
---|---|---|
mkString | List(24,99,104).mkString(",") | 使用给定分隔符将一个集合呈现为Set |
toBuffer | List("f",'t').toBuffer | 将一个不可变的集合转换位一个可变的集合 |
toList | Map("a"->1,'b'->2).toList | 将一个集合转换为list |
toMap | Set(1->true,3->true).toMap | 将一个2元元组的集合转换为一个Map |
toSet | List(2,5,5,3,2).toSet | 将一个集合转换为一个Set |
toString | List(2,5,5,3,2).toString | 将一个集合呈现为一个String,包括集合的类型 |
Java和Scala转换
import collection.JavaConverters._
操作 | 实例 | 描述 |
---|---|---|
asJava | List(12,29).asJava | 将这个Scala集合转换为一个相应的Java集合 |
asScala | new java.util.ArrayList(5).asScala | 将这个Java集合转换为一个相应的Scala集合 |
使用集合的模式匹配
//匹配表达式
val statuses = List(500,404)
val msg = statuses.head match {
case x if x < 500 => "Okay"
case _ => "whoah,an error"
}
//模式哨位
val msg = statuses match {
case x if x contains(500) => "has error"
case _ => "okay"
}
//
val msg = statuses match {
case List(404,500) => "not found & error"
case List(500,404) => "error & not found "
case List(200,200) => "okay"
case _ => "not sure what happened"
}
//值绑定
val msg = statuses match {
case List(500,x) => s"Error followed by $x"
case List(e,x) => s"$e was followed by $x"
}
// 模式匹配表头
val head = List('r','g','b') match {
case k::a => k
case Nil => " "
}
// 模式匹配表尾
val head = List('r','g','b') match {
case k::a::d::Nil => d
case Nil => ""
}
//元组的模式匹配
val code = ("h",204,true) match {
case (_,_,false) => 501
case ("c",_,false) => 501
case ("h",x,true) => x
case (c,x,true) => {
println(s"Did not expect code $c")
x
}
}
可变集合
val m = Map("AAPL" -> 597,"MSFT" -> 40)
val n = m - "AAPL" +("GOOG" -> 521)
//collection.mutable.BUffer是一个通用的可变序列,支持在开头/中间或末尾增加元素
val nums = collection.mutable.Buffer(1)
for (i <- 2 to 10) nums += i
val nums = collection.mutable.Buffer[Int]()
for (i <- 1 to 10) nums += i
val l = nums.toList
//不可变几个都可以通过toBuffer方法转换成可变的collection.mutable.Buffer类型
val m = Map("AAPL" -> 597,"MSFT" -> 40)
val b = m.toBuffer
b trimStart 1 //从缓冲区开头删除一项或多项
b += ("GOOG" -> 521)
val n = b.toMap
使用集合构建器
Builder是Buffer的一个简化形式,仅限于生成指定类型的集合类型,而且只支持追加操作。
val b =Set.newBuilder[Char]
b += 'h' //增加一项
b ++= List('e','l','l','o') //增加多项
val helloSet = b.result //与缓冲区不同,构建器知道相应的不可变类型