我有三堂课
class C {
var id: String = _
}
class B {
var c: List[C] = _
}
class A {
var b: List[B] = _
}
我想收集“ C”类实例的所有“ id”,它们都在“ A”类实例中
val c1 = new C
c1.id = "data1"
val c2 = new C
c2.id = "data2"
val b = new B
b.c = c1::c2::Nil
val a = new A
a.b = b::Nil
此示例代码的预期输出是具有两个元素(即data1,data2)的List [String] 在命令式编程中,我用下面的代码片段实现了同样的效果
def collectCId(a: A): List[String] = {
var collect = List[String]()
for(tmpb <- a.b){
for(tmpc <- tmpb.c){
collect = tmpc.id :: collect
}
}
collect
}
如何在功能上实现相同目标?
Scala版本:2.11
答案 0 :(得分:8)
具有理解力:
def collectCId(a: A): List[String] =
for {
b <- a.b
c <- b.c
} yield c.id