|
通常,for表达式的形式如下:
for(a <- animals; an=a.name;if(an startsWith "Black")) yield n
总结起来就是:
for(seq} yield expr
其中seq由生成器,定义,以及过滤器组成序列,以分号分隔,当然,
如果for用大括号括起来,每一个语句都占一行,那么就和普通的SCALA语句一样,就不需要分号。
class Animalx(val name:String,var age:Int)
object ForYieldTest {
def main(args: Array[String]): Unit = {
val lis = List(new Animalx("jack",1),new Animalx("xixi",4),new Animalx("tom",1),new Animalx("xixi",3))
val r = for(a <- lis;an=a.name;if(an.contains("xi"))) yield (a.name,a.age)
println(r)
//如果用大括号
val r1 = for {
a <- lis
an=a.name
if(an.contains("xi"))
} yield(a.name,a.age)
println(r1)
//如果多个生成器,则前面的生成一个,后面的生成一轮
val r2 = for(x <- List(1,2);y <- List("one","two")) yield (x,y)
println(r2)
}
}
显示如下:
List((xixi,4), (xixi,3))
List((xixi,4), (xixi,3))
List((1,one), (1,two), (2,one), (2,two))
|
|