функциональное программирование: получение списка данных из вложенного цикла - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть три класса

class C {
  var id: String = _
}

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

class A {
  var b: List[B] = _
}

Я хочу собрать все "id" экземпляра класса "C", которые находятся в экземпляре класса "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

Ожидаетсявывод для этого примера кода - 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
}

Как можно добиться того же функционально?

Версия Scala: 2.11

1 Ответ

0 голосов
/ 12 декабря 2018

с пониманием:

def collectCId(a: A): List[String] = 
 for { 
   b <- a.b
   c <- b.c
 } yield c.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...