Có một bộ kết hợp dòng Akka để thực hiện những điều sau (hoặc một cái gì đó có hiệu lực) không? (Hãy gọi nó là and
cho bây giờ.)Làm thế nào để soạn hai luồng cạnh nhau?
(flow1: Flow[I, O, Mat]).and[O2](flow2: Flow[I, O2, Mat]): Flow[I, (O, O2), Mat]
Ngữ nghĩa sẽ là bất cứ điều gì các nguồn, các yếu tố của nó sẽ được chuyển đến cả Flow
s, và đầu ra của họ sẽ được kết hợp thành một mới Flow
như một tuple. (Đối với những người quen thuộc với các mũi tên từ lý thuyết loại hương vị chức năng lập trình, tôi đang tìm kiếm một cái gì đó giống như &&&
.)
Có hai combinators trong thư viện trông có liên quan, cụ thể là zip
và alsoTo
. Nhưng người trước đây chấp nhận một số SourceShape
và sau đó là số SinkShape
. Không chấp nhận một số GraphShape
. Tại sao điều này là trường hợp?
trường hợp sử dụng của tôi là một cái gì đó như sau:
someSource
.via(someFlowThatReturnsUnit.and(Flow.apply))
.runWith(someSink)
Không tìm thấy cái gì đó như .and
, tôi sửa đổi ban đầu Flow
của tôi như thế này:
someSource
.via(someFlowThatDoesWhateverItWasDoingEarlierButNowAlsoEmitsInputsAsIs)
.runWith(someSink)
này hoạt động, nhưng tôi đang tìm kiếm một sạch hơn, giải pháp tổng hợp hơn.
Một dòng chảy không phải là nghiêm chỉnh 1: 1 (1 đầu vào cho 1 đầu ra) do đó, một combinator chung như vậy sẽ khó khăn. (Bạn có thể sử dụng GraphDSL và sử dụng Broadcast + Merge) –