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

Scala 函数式编程:从嵌套循环中获取数据列表,scala,functional-programming,Scala,Functional Programming,我有三节课 class C { var id: String = _ } class B { var c: List[C] = _ } class A { var b: List[B] = _ } 我想收集类“C”实例的所有“id”,它们位于类“a”实例中 此示例代码的预期输出是具有两个元素(即data1、data2)的List[String] 在命令式编程中,我用下面的代码片段实现了同样的效果 def collectCId(a: A): List[String] = {

我有三节课

class C {
  var id: String = _
}

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

class A {
  var b: List[B] = _
}
我想收集类“C”实例的所有“id”,它们位于类“a”实例中

此示例代码的预期输出是具有两个元素(即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
}
def collectCId(a:a):列表[字符串]={
var collect=List[String]()

对于(tmpb和理解:

def collectCId(a: A): List[String] = 
 for { 
   b <- a.b
   c <- b.c
 } yield c.id
def collectCId(a:a):列表[字符串]=
对于{

b变量的名称令人困惑:
c
作为一个
列表[c]
,可能使用
cs
来代替?谢谢@chirlo。我有一个简单的问题。是否删除“var”在客观方面被称为函数式编程吗?@user811602,你能重新表述一下这个问题吗?不知道你在问什么,对不起。当我可以说我已经用函数式编程范式编写了代码时?有没有相同的固定规则集?我知道这可能是不同的问题,但快速链接将对我有很大帮助。有一些通常与FP相关的概念,如避免副作用和不变性,但它不是黑白的,不需要全神贯注。你可以在命令式程序中使用一些FP原则,并获得很多好处。有非常好的信息开始,我建议深入了解,只是不要阅读一次完成这一切,当你对FP更加熟悉时,继续按需阅读。
def collectCId(a: A): List[String] = 
 for { 
   b <- a.b
   c <- b.c
 } yield c.id