Scala语言笔记 - 第三篇(容器方法篇)
最近研究了下scala语言,这个语言最强大的就是它强大的函数式编程(Function Programming)能力,记录下最近学习的一些新的和技巧。注意:本系列博客不会从头讲解该语言的语法,而是通过一些例子讲解该语言的一些技巧,如果需要从头学习scala,建议使用该教程快速入门。
map和flapMap方法:
对于数组或者容器,scala和Python等语言类似,提供了map和flapMap等方法(目前Java8的stream方法也支持了这种用法)来方便的对容器里面的元素进行处理,并生成一个新的容器对象,来看如下代码:
/**
* Person class
* @param _name name
* @param _age age
* @param _friends firends
*/
case class Person(_name:String, _age:Int, _friends:Seq[String]){
private var name = _name
private var age = _age
private var friends = _friends
def getName() : String = this.name
def getAge() : Int = this.age
def getFriends() : Seq[String] = this.friends
}
def main(args: Array[String]): Unit = {
val li = List(Person("li",12,List("li1","li2")), Person("wang", 13, List("wang1","wang2", "wang3")),
Person("zhao", 15, List("zhao1")))
//map:将列表转换为列表嵌套列表的方式,即List(List(a,b,c), List(d,e,f), List(g,h,i))的形式
println(li.map(m => m.getFriends()))
//flatMap:将列表转换为一个一维的列表,即List(a,b,c,d,e,f,g,h,i)的形式
println(li.flatMap(m => m.getFriends()))
println("------------------------------------------------------------------")
var doubleArr = Array[Array[String]](Array("String1", "String2"),Array("World1", "World2", "World3"))
//
println(doubleArr.mkString(" "))
//表示将前面的变量转换为冒号后面的类型,这里的意思是将doubleArr拼接成单个Array
var flatArr = Array.concat(doubleArr:_*)
// 0.5, 一个冒号用来转换参数的例子。
var res = 1 / (2 : Double)
println(flatArr.mkString(" "))
println("------------------------------------------------------------------")
}
Array的打印方式和Java类似,直接进行print
,打印出来的会是对象的id,在这里可以使用mkString
方法生成字符串来打印,同时,请注意concat
的用法,是scala中的一个黑科技用法。