+str #16885 add splitAfter
Implementation is shared with splitWhen - see Split / SplitWhere Allows for easy addition of splitWhen(x => Decision) if we'd like to Resolves #16885
This commit is contained in:
parent
454a393af1
commit
5e8ff792a0
12 changed files with 709 additions and 216 deletions
|
|
@ -509,10 +509,71 @@ class Source[+Out, +Mat](delegate: scaladsl.Source[Out, Mat]) extends Graph[Sour
|
|||
* true, false, // elements go into second substream
|
||||
* true, false, false // elements go into third substream
|
||||
* }}}
|
||||
*
|
||||
* In case the *first* element of the stream matches the predicate, the first
|
||||
* substream emitted by splitWhen will start from that element. For example:
|
||||
*
|
||||
* {{{
|
||||
* true, false, false // first substream starts from the split-by element
|
||||
* true, false // subsequent substreams operate the same way
|
||||
* }}}
|
||||
*
|
||||
* If the split predicate `p` throws an exception and the supervision decision
|
||||
* is [[akka.stream.Supervision.Stop]] the stream and substreams will be completed
|
||||
* with failure.
|
||||
*
|
||||
* If the split predicate `p` throws an exception and the supervision decision
|
||||
* is [[akka.stream.Supervision.Resume]] or [[akka.stream.Supervision.Restart]]
|
||||
* the element is dropped and the stream and substreams continue.
|
||||
*
|
||||
* '''Emits when''' an element for which the provided predicate is true, opening and emitting a new substream for subsequent element
|
||||
*
|
||||
* '''Backpressures when''' there is an element pending for the next substream, but the previous is not fully consumed yet, or the substream backpressures
|
||||
*
|
||||
* '''Completes when''' upstream completes
|
||||
*
|
||||
* '''Cancels when''' downstream cancels and substreams cancel
|
||||
*
|
||||
* See also [[Source.splitAfter]].
|
||||
*/
|
||||
def splitWhen(p: function.Predicate[Out]): javadsl.Source[javadsl.Source[Out, Unit], Mat] =
|
||||
new Source(delegate.splitWhen(p.test).map(_.asJava))
|
||||
|
||||
/**
|
||||
* This operation applies the given predicate to all incoming elements and
|
||||
* emits them to a stream of output streams. It *ends* the current substream when the
|
||||
* predicate is true. This means that for the following series of predicate values,
|
||||
* three substreams will be produced with lengths 2, 2, and 3:
|
||||
*
|
||||
* {{{
|
||||
* false, true, // elements go into first substream
|
||||
* false, true, // elements go into second substream
|
||||
* false, false, true // elements go into third substream
|
||||
* }}}
|
||||
*
|
||||
* If the split predicate `p` throws an exception and the supervision decision
|
||||
* is [[akka.stream.Supervision.Stop]] the stream and substreams will be completed
|
||||
* with failure.
|
||||
*
|
||||
* If the split predicate `p` throws an exception and the supervision decision
|
||||
* is [[akka.stream.Supervision.Resume]] or [[akka.stream.Supervision.Restart]]
|
||||
* the element is dropped and the stream and substreams continue.
|
||||
*
|
||||
* '''Emits when''' an element passes through. When the provided predicate is true it emitts the element
|
||||
* and opens a new substream for subsequent element
|
||||
*
|
||||
* '''Backpressures when''' there is an element pending for the next substream, but the previous
|
||||
* is not fully consumed yet, or the substream backpressures
|
||||
*
|
||||
* '''Completes when''' upstream completes
|
||||
*
|
||||
* '''Cancels when''' downstream cancels and substreams cancel
|
||||
*
|
||||
* See also [[Source.splitWhen]].
|
||||
*/
|
||||
def splitAfter[U >: Out](p: function.Predicate[Out]): javadsl.Source[Source[Out, Unit], Mat] =
|
||||
new Source(delegate.splitAfter(p.test).map(_.asJava))
|
||||
|
||||
/**
|
||||
* Transforms a stream of streams into a contiguous stream of elements using the provided flattening strategy.
|
||||
* This operation can be used on a stream of element type [[Source]].
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue