如何 "contramap" akka-streams Sink
How to "contramap" akka-streams Sink
拥有 akka-streams Sink
:
val sink: Sink[Foo, Any] = ???
以及从 Bar
到 Foo
的函数:
val f: Bar => Foo = ???
我想contramap(map相反)sink
和f
得到一个sink类型Sink[Bar, Any]
,但是在库中找不到这么简单的方法。如何实现我所需要的?
事实证明很简单。
创建一个 Flow
接受 Bar
s:
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)
拥有 akka-streams Sink
:
val sink: Sink[Foo, Any] = ???
以及从 Bar
到 Foo
的函数:
val f: Bar => Foo = ???
我想contramap(map相反)sink
和f
得到一个sink类型Sink[Bar, Any]
,但是在库中找不到这么简单的方法。如何实现我所需要的?
事实证明很简单。
创建一个 Flow
接受 Bar
s:
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)