下面的例子,是打印 母子的姓名
样本类
case class Person(name: String, isMale: Boolean, children: Person*)
用高级函数实现
def main(args: Array[String]) {
val lauren = Person("Lauren", true)
val rocky = Person("rocky", false)
val vivian = Person("vivian", false, lauren, rocky)
val persons = List(lauren, rocky, vivian)
//println(for_deal(persons))
println(function_deal(persons))
}
def function_deal(persons: List[Person]): List[(String, String)] = {
println("for_deal run")
val currntTime = System.currentTimeMillis()
val list = persons filter (person => !person.isMale) flatMap (person => (person.children
map (child => (person.name, child.name))))
println("used time=" + (System.currentTimeMillis() - currntTime))
list
}
运行结果
used time=117
List((vivian,Lauren), (vivian,rocky))
用for 表达式
代码如下
def main(args: Array[String]) {
val lauren = Person("Lauren", true)
val rocky = Person("rocky", false)
val vivian = Person("vivian", false, lauren, rocky)
val persons = List(lauren, rocky, vivian)
println(for_deal(persons))
//println(function_deal(persons))
}
def for_deal(persons: List[Person]): List[(String, String)] = {
println("for_deal run")
val currntTime = System.currentTimeMillis()
val result = for (person <- persons; if !person.isMale; child <- person.children) yield (person.name, child.name)
println("used time=" + (System.currentTimeMillis() - currntTime))
result
}
运行结果:
for_deal run
used time=105
List((vivian,Lauren), (vivian,rocky))
从上面运行结果看,for 表达式代码简洁,效率也不低
参考资料:
百度网盘:http://pan.baidu.com/share/home?uk=4013289088#category/type=0
微信号:18610086859
DT大数据微信公众账号:DT_Spark
DT大数据梦工厂交流群:① 462923555 ②418110145 ③437123764