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

时间:2018-12-12 13:06:39

标签: scala functional-programming

我有三堂课

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

1 个答案:

答案 0 :(得分:8)

具有理解力:

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