今天来学一下scala中的For表达式的用法。
package scala.learn
case class Persons(name:String,isMale:Boolean,children:Persons*)
object Test_85 {
def main(args:Array[String]){
val lauren = Persons("Lauren",false)
val rocky = Persons("Rocky",true)
val vivian = Persons("Vivian",false,lauren,rocky)
val persons = List(lauren,rocky,vivian)
val result = persons.filter { person => !person.isMale }.flatMap { person => (person.children.map { child => (person.name,child.name) } ) }
println(result)
val forResult = for(person<-persons;if !person.isMale;child <- person.children) yield(person.name,child.name)
println(result)
}
}
我们可以看到,我们第一种方法用的是高阶函数进行数据的筛选,首先通过filter选出Famale的人,然后通过flatMap,对persons中的每一个元素进行逐一的运算:将输入person选出他们的children,然后将children再次进行map运算,得到person的name和该person的children的name组成的列表。
而同样的功能,我们可以通过for循环,很简单的表达出来。
首先,person遍历persons,然后,通过if控制语句,挑选出Famale,然后,child再遍历挑选出来的person的children。最后经过yield,组成结果列表。
其实,通过源码,我们可以看到,for循环最终也是通过map计算和flatMap计算组合而成的。
分享下更多的scala资源吧:
百度云盘:http://pan.baidu.com/s/1gd7133t
微云云盘:http://share.weiyun.com/047efd6cc76d6c0cb21605cfaa88c416
360云盘: http://yunpan.cn/cQN9gvcKXe26M (提取码:13cd)
信息来源于 DT大数据梦工厂微信公众账号:DT_Spark
关注微信账号,获取更多关于scala学习内容