+str #17383 implement intersperse
This commit is contained in:
parent
99158f515c
commit
61c2213e02
10 changed files with 368 additions and 3 deletions
|
|
@ -553,6 +553,64 @@ class Source[+Out, +Mat](delegate: scaladsl.Source[Out, Mat]) extends Graph[Sour
|
|||
def fold[T](zero: T)(f: function.Function2[T, Out, T]): javadsl.Source[T, Mat] =
|
||||
new Source(delegate.fold(zero)(f.apply))
|
||||
|
||||
/**
|
||||
* Intersperses stream with provided element, similar to how [[scala.collection.immutable.List.mkString]]
|
||||
* injects a separator between a List's elements.
|
||||
*
|
||||
* Additionally can inject start and end marker elements to stream.
|
||||
*
|
||||
* Examples:
|
||||
*
|
||||
* {{{
|
||||
* Source<Integer, ?> nums = Source.from(Arrays.asList(0, 1, 2, 3));
|
||||
* nums.intersperse(","); // 1 , 2 , 3
|
||||
* nums.intersperse("[", ",", "]"); // [ 1 , 2 , 3 ]
|
||||
* }}}
|
||||
*
|
||||
* In case you want to only prepend or only append an element (yet still use the `intercept` feature
|
||||
* to inject a separator between elements, you may want to use the following pattern instead of the 3-argument
|
||||
* version of intersperse (See [[Source.concat]] for semantics details):
|
||||
*
|
||||
* {{{
|
||||
* Source.single(">> ").concat(list.intersperse(","))
|
||||
* list.intersperse(",").concat(Source.single("END"))
|
||||
* }}}
|
||||
* '''Emits when''' upstream emits (or before with the `start` element if provided)
|
||||
*
|
||||
* '''Backpressures when''' downstream backpressures
|
||||
*
|
||||
* '''Completes when''' upstream completes
|
||||
*
|
||||
* '''Cancels when''' downstream cancels
|
||||
*/
|
||||
def intersperse[T >: Out](start: T, inject: T, end: T): javadsl.Source[T, Mat] =
|
||||
new Source(delegate.intersperse(start, inject, end))
|
||||
|
||||
/**
|
||||
* Intersperses stream with provided element, similar to how [[scala.collection.immutable.List.mkString]]
|
||||
* injects a separator between a List's elements.
|
||||
*
|
||||
* Additionally can inject start and end marker elements to stream.
|
||||
*
|
||||
* Examples:
|
||||
*
|
||||
* {{{
|
||||
* Source<Integer, ?> nums = Source.from(Arrays.asList(0, 1, 2, 3));
|
||||
* nums.intersperse(","); // 1 , 2 , 3
|
||||
* nums.intersperse("[", ",", "]"); // [ 1 , 2 , 3 ]
|
||||
* }}}
|
||||
*
|
||||
* '''Emits when''' upstream emits (or before with the `start` element if provided)
|
||||
*
|
||||
* '''Backpressures when''' downstream backpressures
|
||||
*
|
||||
* '''Completes when''' upstream completes
|
||||
*
|
||||
* '''Cancels when''' downstream cancels
|
||||
*/
|
||||
def intersperse[T >: Out](inject: T): javadsl.Source[T, Mat] =
|
||||
new Source(delegate.intersperse(inject))
|
||||
|
||||
/**
|
||||
* Chunk up this stream into groups of elements received within a time window,
|
||||
* or limited by the given number of elements, whatever happens first.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue