如何 "contramap" akka-streams Sink

How to "contramap" akka-streams Sink

拥有 akka-streams Sink:

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

以及从 BarFoo 的函数:

val f: Bar => Foo = ???

我想contramapmap相反)sinkf得到一个sink类型Sink[Bar, Any],但是在库中找不到这么简单的方法。如何实现我所需要的?

事实证明很简单。

创建一个 Flow 接受 Bars:

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

并将其与 f 流水线结果映射到原始 sink:

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

使用 akka-streams 版本 2.4.X 更简单:

val sink3: Sink[Bar, Future[Done]] = sink.contramap(f)