concatLazy
After completion of the original upstream the elements of the given source will be emitted.
Signature
Source.concat
Source.concat
Flow.concat
Flow.concat
Description
After completion of the original upstream the elements of the given source will be emitted.
Both streams will be materialized together, however, the given stream will be pulled for the first time only after the original upstream was completed. (In contrast, concat
, introduces single-element buffers after both, original and given sources so that the given source is also pulled once immediately.)
To defer the materialization of the given source (or to completely avoid its materialization if the original upstream fails or cancels), wrap it into Source.lazySource
.
If materialized values needs to be collected concatLazyMat
is available.
Example
- Scala
-
source
val sourceA = Source(List(1, 2, 3, 4)) val sourceB = Source(List(10, 20, 30, 40)) sourceA.concatLazy(sourceB).runWith(Sink.foreach(println))
- Java
-
source
import org.apache.pekko.stream.javadsl.Keep; import org.apache.pekko.stream.javadsl.Source; import org.apache.pekko.stream.javadsl.Sink; import java.util.*; Source<Integer, NotUsed> sourceA = Source.from(Arrays.asList(1, 2, 3, 4)); Source<Integer, NotUsed> sourceB = Source.from(Arrays.asList(10, 20, 30, 40)); sourceA.concatLazy(sourceB).runForeach(System.out::println, system); // prints 1, 2, 3, 4, 10, 20, 30, 40
Reactive Streams semantics
emits when the current stream has an element available; if the current input completes, it tries the next one
backpressures when downstream backpressures
completes when all upstreams complete