Отображение будущего [List [ObjectOne]] в Future [List [ObjectTwo]] с атрибутом внутреннего списка - одна цепочка вызовов - PullRequest
0 голосов
/ 23 марта 2020
case class ObjectOne(id: String, numbers: List[Int])
case class ObjectTwo(id: String, numberOfFives : Int)

val start : Future[List[ObjectOne]] = ...
val end : Future[List[ObjectTwo]] = start. ?????

Я пытаюсь превратить начальный объект в конечный объект. Конечный объект должен содержать идентификатор из ObjectOne и количество раз, когда di git 5 появлялся в objectOne.numbers.

Я не могу найти способ записать его в простую цепочку вызовов

Ответы [ 2 ]

3 голосов
/ 23 марта 2020

Предположим, у вас есть функция преобразования, которая выглядит следующим образом:

def objectOneToObjectTwo(one: ObjectOne): ObjectTwo = ???

Тогда преобразование Future[List[_]] будет выглядеть следующим образом:

// put proper execution context or use global. It used in `Future#map` operation
implicit val ec: ExecutionContext = ???

val start : Future[List[ObjectOne]] = ???
val end : Future[List[ObjectTwo]] = start.map(_.map(objectOneToObjectTwo))

Надеюсь, это поможет!

2 голосов
/ 23 марта 2020

Карта, за которой следует другая карта, указывает, что можно рассмотреть такой трансформатор, как Nested, например

val end = Nested(start).map { 
  case ObjectOne(id, numbers) => ObjectTwo(id, numbers.count(_ == 5)) 
}

scast ie

...