Как контрамапировать акка-потоки Sink

Имея akka-streams Sink:

val sink: Sink[Foo, Any] = ???

и функция от Bar до Foo:

val f: Bar => Foo = ???

Я хочу contramap (противоположность map) sink с f, чтобы получить сток типа Sink[Bar, Any], но не могу найти такой простой метод в библиотеке. Как добиться того, что мне нужно?


person Tvaroh    schedule 14.12.2015    source источник


Ответы (2)


С akka-streams версией 2.4.X это еще проще:

val sink3: Sink[Bar, Future[Done]] = sink.contramap(f)
person Filippo Vitale    schedule 09.05.2016

Оказалось, что все довольно просто.

Создайте Flow принимающий Bars:

val flow: Flow[Bar, Bar, Unit] = Flow[Bar]

и сопоставьте его с f результатами конвейерной обработки с исходным sink:

val sink2: Sink[Bar, Unit] = flow.map(f).to(sink)
person Tvaroh    schedule 14.12.2015