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
有了理解:
def collectCId(a: A): List[String] =
for {
b <- a.b
c <- b.c
} yield c.id
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |