Как сохранить материализованную ценность в пользовательском приемнике?

Не могли бы вы рассказать мне, как сохранить материализованный Future[Int] в таком примере?

val test: Sink[Int, NotUsed] =
  MergeHub.source[Int].grouped(100).to(Sink.fold(0L) { case (count, items) => count + items.sum }).run()

Я хотел бы получить Sink[Int, Future[Int]]. Я смотрел на viaMat, toMat и не мог понять.


person expert    schedule 25.06.2017    source источник


Ответы (1)


Если вы хотите run() весь график в одном месте, просто используйте toMat + Keep.right

val result: Future[Int] =
    MergeHub.source[Int].grouped(100).toMat(Sink.fold(0) { case (count, items) => count + items.sum })(Keep.right).run()

если вам нужно повторно использовать ваш приемник "group + fold", вам нужно удалить источник и вызов run

  val sink: Sink[Int, Future[Int]] =
    Flow[Int].grouped(100).toMat(Sink.fold(0) { case (count, items) => count + items.sum })(Keep.right)

Дополнительная информация в документы.

person Stefano Bonetti    schedule 25.06.2017