函数式编程:从嵌套循环中获取数据列表

use*_*602 3 functional-programming scala

我有三节课

class C {
  var id: String = _
}

class B {
  var c: List[C] = _
}

class A {
  var b: List[B] = _
}
Run Code Online (Sandbox Code Playgroud)

我想收集类"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
Run Code Online (Sandbox Code Playgroud)

这个示例代码的预期输出是具有两个元素的List [String](即data1,data2)在命令式编程中,我已经用下面的代码片段实现了相同的

def collectCId(a: A): List[String] = {
  var collect = List[String]()
  for(tmpb <- a.b){
    for(tmpc <- tmpb.c){
      collect = tmpc.id :: collect
    }
  }
  collect
}
Run Code Online (Sandbox Code Playgroud)

如何以功能方式实现相同功能?

Scala版本:2.11

Chi*_*rlo 8

有了理解:

def collectCId(a: A): List[String] = 
 for { 
   b <- a.b
   c <- b.c
 } yield c.id
Run Code Online (Sandbox Code Playgroud)