Scala для понимания — объединение Future с IndexedSeq

Можно ли добиться чего-то вроде этого:

for {
  numberOfLines <- Future { getNumberOfLines() }
  i <- 0 to numberOfLines
  result <- Future { extractResultFromLine(i) }
} yield result

Надеюсь, понятно, каковы мои намерения.


person bayerb    schedule 20.01.2018    source источник


Ответы (1)


Вы можете использовать Future.traverse

// Gives you a Future[IndexedSeq[`whatever extractResult returns`]]
for {
    numberOfLines <- Future{getNumberOfLines()}
    result <- Future.traverse(0 to numberOfLines)(i => Future(extractResultFromLine(i)))
} yield result
person Oleg Pyzhcov    schedule 20.01.2018
comment
Спасибо! А что, если тело for выглядит так?: i ‹- 0 to numberOfLines; j = я % 5; к = я * 2; результат ‹- Будущее (делай что угодно (j, k)) - person bayerb; 20.01.2018