Interface FlowOps<Out,​Mat>

  • All Known Subinterfaces:
    FlowOpsMat<Out,​Mat>, SubFlow<Out,​Mat,​F,​C>
    All Known Implementing Classes:
    Flow, Source

    public interface FlowOps<Out,​Mat>
    Scala API: Operations offered by Sources and Flows with a free output side: the DSL flows left-to-right only.

    INTERNAL API: this trait will be changed in binary-incompatible ways for classes that are derived from it! Do not implement this interface outside the Pekko code base!

    Binary compatibility is only maintained for callers of this trait&rsquo;s interface.

    • Method Summary

      All Methods Instance Methods Abstract Methods Deprecated Methods 
      Modifier and Type Method Description
      <U,​M>
      FlowOps
      $plus$plus​(Graph<SourceShape<U>,​M> that)
      Concatenates this Flow with the given Source so the first element emitted by that source is emitted after the last element of this flow.
      FlowOps addAttributes​(Attributes attr)  
      <Agg,​Emit>
      FlowOps
      aggregateWithBoundary​(scala.Function0<Agg> allocate, scala.Function2<Agg,​Out,​scala.Tuple2<Agg,​java.lang.Object>> aggregate, scala.Function1<Agg,​Emit> harvest, scala.Option<scala.Tuple2<scala.Function1<Agg,​java.lang.Object>,​scala.concurrent.duration.FiniteDuration>> emitOnTimer)
      Aggregate input elements into an arbitrary data structure that can be completed and emitted downstream when custom condition is met which can be triggered by aggregate or timer.
      FlowOps alsoTo​(Graph<SinkShape<Out>,​?> that)
      Attaches the given Sink to this Source, meaning that elements that pass through will also be sent to the Sink.
      FlowOps alsoToAll​(scala.collection.immutable.Seq<Graph<SinkShape<Out>,​?>> those)
      Attaches the given Sinks to this Source, meaning that elements that pass through will also be sent to the Sink.
      <M> Graph<FlowShape<Out,​Out>,​M> alsoToGraph​(Graph<SinkShape<Out>,​M> that)  
      <S> FlowOps ask​(int parallelism, ActorRef ref, Timeout timeout, scala.reflect.ClassTag<S> tag)
      Use the ask pattern to send a request-reply message to the target ref actor.
      <S> FlowOps ask​(ActorRef ref, Timeout timeout, scala.reflect.ClassTag<S> tag)
      Use the ask pattern to send a request-reply message to the target ref actor.
      FlowOps async()
      Put an asynchronous boundary around this Flow.
      FlowOps backpressureTimeout​(scala.concurrent.duration.FiniteDuration timeout)
      If the time between the emission of an element and the following downstream demand exceeds the provided timeout, the stream is failed with a scala.concurrent.TimeoutException.
      <S> FlowOps batch​(long max, scala.Function1<Out,​S> seed, scala.Function2<S,​Out,​S> aggregate)
      Allows a faster upstream to progress independently of a slower subscriber by aggregating elements into batches until the subscriber is ready to accept them.
      <S> FlowOps batchWeighted​(long max, scala.Function1<Out,​java.lang.Object> costFn, scala.Function1<Out,​S> seed, scala.Function2<S,​Out,​S> aggregate)
      Allows a faster upstream to progress independently of a slower subscriber by aggregating elements into batches until the subscriber is ready to accept them.
      FlowOps buffer​(int size, OverflowStrategy overflowStrategy)
      Adds a fixed size buffer in the flow that allows to store elements from a faster upstream until it becomes full.
      <T> FlowOps collect​(scala.PartialFunction<Out,​T> pf)
      Transform this stream by applying the given partial function to each of the elements on which the function is defined as they pass through this processing step.
      <T> FlowOps collectType​(scala.reflect.ClassTag<T> tag)
      Transform this stream by testing the type of each of the elements on which the element is an instance of the provided type as they pass through this processing step.
      FlowOps completionTimeout​(scala.concurrent.duration.FiniteDuration timeout)
      If the completion of the stream does not happen until the provided timeout, the stream is failed with a scala.concurrent.TimeoutException.
      <U,​Mat2>
      FlowOps
      concat​(Graph<SourceShape<U>,​Mat2> that)
      Concatenate the given Source to this Flow, meaning that once this Flow&rsquo;s input is exhausted and all result elements have been generated, the Source&rsquo;s elements will be produced.
      <U> FlowOps concatAllLazy​(scala.collection.immutable.Seq<Graph<SourceShape<U>,​?>> those)
      Concatenate the given Sources to this Flow, meaning that once this Flow&rsquo;s input is exhausted and all result elements have been generated, the Sources' elements will be produced.
      <U,​Mat2>
      Graph<FlowShape<Out,​U>,​Mat2>
      concatGraph​(Graph<SourceShape<U>,​Mat2> that, boolean detached)  
      <U,​Mat2>
      FlowOps
      concatLazy​(Graph<SourceShape<U>,​Mat2> that)
      Concatenate the given Source to this Flow, meaning that once this Flow&rsquo;s input is exhausted and all result elements have been generated, the Source&rsquo;s elements will be produced.
      <O2> FlowOps conflate​(scala.Function2<O2,​O2,​O2> aggregate)
      Allows a faster upstream to progress independently of a slower subscriber by conflating elements into a summary until the subscriber is ready to accept them.
      <S> FlowOps conflateWithSeed​(scala.Function1<Out,​S> seed, scala.Function2<S,​Out,​S> aggregate)
      Allows a faster upstream to progress independently of a slower subscriber by conflating elements into a summary until the subscriber is ready to accept them.
      FlowOps delay​(scala.concurrent.duration.FiniteDuration of, DelayOverflowStrategy strategy)
      Shifts elements emission in time by a specified amount.
      DelayOverflowStrategy delay$default$2()  
      FlowOps delayWith​(scala.Function0<DelayStrategy<Out>> delayStrategySupplier, DelayOverflowStrategy overFlowStrategy)
      Shifts elements emission in time by an amount individually determined through delay strategy a specified amount.
      FlowOps detach()
      Detaches upstream demand from downstream demand without detaching the stream rates; in other words acts like a buffer of size 1.
      FlowOps divertTo​(Graph<SinkShape<Out>,​?> that, scala.Function1<Out,​java.lang.Object> when)
      Attaches the given Sink to this Flow, meaning that elements will be sent to the Sink instead of being passed through if the predicate when returns true.
      <M> Graph<FlowShape<Out,​Out>,​M> divertToGraph​(Graph<SinkShape<Out>,​M> that, scala.Function1<Out,​java.lang.Object> when)  
      FlowOps drop​(long n)
      Discard the given number of elements at the beginning of the stream.
      FlowOps dropWhile​(scala.Function1<Out,​java.lang.Object> p)
      Discard elements at the beginning of the stream while predicate is true.
      FlowOps dropWithin​(scala.concurrent.duration.FiniteDuration d)
      Discard the elements received within the given duration at beginning of the stream.
      <U> FlowOps expand​(scala.Function1<Out,​scala.collection.Iterator<U>> expander)
      Allows a faster downstream to progress independently of a slower upstream by extrapolating elements from an older element until new element comes from the upstream.
      <U> FlowOps extrapolate​(scala.Function1<U,​scala.collection.Iterator<U>> extrapolator, scala.Option<U> initial)
      Allows a faster downstream to progress independent of a slower upstream.
      <U> scala.None$ extrapolate$default$2()  
      FlowOps filter​(scala.Function1<Out,​java.lang.Object> p)
      Only pass on those elements that satisfy the given predicate.
      FlowOps filterNot​(scala.Function1<Out,​java.lang.Object> p)
      Only pass on those elements that NOT satisfy the given predicate.
      <T,​M>
      FlowOps
      flatMapConcat​(scala.Function1<Out,​Graph<SourceShape<T>,​M>> f)
      Transform each input element into a Source of output elements that is then flattened into the output stream by concatenation, fully consuming one Source after the other.
      <T,​M>
      FlowOps
      flatMapMerge​(int breadth, scala.Function1<Out,​Graph<SourceShape<T>,​M>> f)
      Transform each input element into a Source of output elements that is then flattened into the output stream by merging, where at most breadth substreams are being consumed at any given time.
      <Out2,​Mat2>
      FlowOps
      flatMapPrefix​(int n, scala.Function1<scala.collection.immutable.Seq<Out>,​Flow<Out,​Out2,​Mat2>> f)
      Takes up to n elements from the stream (less than n only if the upstream completes before emitting n elements), then apply f on these elements in order to obtain a flow, this flow is then materialized and the rest of the input is processed by this flow (similar to via).
      <T> FlowOps fold​(T zero, scala.Function2<T,​Out,​T> f)
      Similar to scan but only emits its result when the upstream completes, after which it also completes.
      <T> FlowOps foldAsync​(T zero, scala.Function2<T,​Out,​scala.concurrent.Future<T>> f)
      Similar to fold but with an asynchronous function.
      <K> SubFlow<Out,​Mat,​FlowOps,​java.lang.Object> groupBy​(int maxSubstreams, scala.Function1<Out,​K> f)
      This operation demultiplexes the incoming stream into separate output streams, one for each element key.
      <K> SubFlow<Out,​Mat,​FlowOps,​java.lang.Object> groupBy​(int maxSubstreams, scala.Function1<Out,​K> f, boolean allowClosedSubstreamRecreation)
      This operation demultiplexes the incoming stream into separate output streams, one for each element key.
      FlowOps grouped​(int n)
      Chunk up this stream into groups of the given size, with the last group possibly smaller than requested due to end-of-stream.
      FlowOps groupedWeighted​(long minWeight, scala.Function1<Out,​java.lang.Object> costFn)
      Chunk up this stream into groups of elements that have a cumulative weight greater than or equal to the minWeight, with the last group possibly smaller than requested minWeight due to end-of-stream.
      FlowOps groupedWeightedWithin​(long maxWeight, int maxNumber, scala.concurrent.duration.FiniteDuration d, scala.Function1<Out,​java.lang.Object> costFn)
      Chunk up this stream into groups of elements received within a time window, or limited by the weight and number of the elements, whatever happens first.
      FlowOps groupedWeightedWithin​(long maxWeight, scala.concurrent.duration.FiniteDuration d, scala.Function1<Out,​java.lang.Object> costFn)
      Chunk up this stream into groups of elements received within a time window, or limited by the weight of the elements, whatever happens first.
      FlowOps groupedWithin​(int n, scala.concurrent.duration.FiniteDuration d)
      Chunk up this stream into groups of elements received within a time window, or limited by the given number of elements, whatever happens first.
      FlowOps idleTimeout​(scala.concurrent.duration.FiniteDuration timeout)
      If the time between two processed elements exceeds the provided timeout, the stream is failed with a scala.concurrent.TimeoutException.
      FlowOps initialDelay​(scala.concurrent.duration.FiniteDuration delay)
      Delays the initial element by the specified duration.
      FlowOps initialTimeout​(scala.concurrent.duration.FiniteDuration timeout)
      If the first element has not passed through this operator before the provided timeout, the stream is failed with a scala.concurrent.TimeoutException.
      <U> FlowOps interleave​(Graph<SourceShape<U>,​?> that, int segmentSize)
      Interleave is a deterministic merge of the given Source with elements of this Flow.
      <U> FlowOps interleave​(Graph<SourceShape<U>,​?> that, int segmentSize, boolean eagerClose)
      Interleave is a deterministic merge of the given Source with elements of this Flow.
      <U> FlowOps interleaveAll​(scala.collection.immutable.Seq<Graph<SourceShape<U>,​?>> those, int segmentSize, boolean eagerClose)
      Interleave is a deterministic merge of the given Sources with elements of this Flow.
      <U,​M>
      Graph<FlowShape<Out,​U>,​M>
      interleaveGraph​(Graph<SourceShape<U>,​M> that, int segmentSize, boolean eagerClose)  
      <U,​M>
      boolean
      interleaveGraph$default$3()  
      <U,​Mat2>
      FlowOps
      internalConcat​(Graph<SourceShape<U>,​Mat2> that, boolean detached)  
      <U> FlowOps internalConcatAll​(Graph<SourceShape<U>,​?>[] those, boolean detached)  
      <T> FlowOps intersperse​(T inject)
      Intersperses stream with provided element, similar to how scala.collection.immutable.List.mkString injects a separator between a List's elements.
      <T> FlowOps intersperse​(T start, T inject, T end)
      Intersperses stream with provided element, similar to how scala.collection.immutable.List.mkString injects a separator between a List's elements.
      <U> FlowOps keepAlive​(scala.concurrent.duration.FiniteDuration maxIdle, scala.Function0<U> injectedElem)
      Injects additional elements if upstream does not emit for a configured amount of time.
      FlowOps limit​(long max)
      Ensure stream boundedness by limiting the number of elements from upstream.
      <T> FlowOps limitWeighted​(long max, scala.Function1<Out,​java.lang.Object> costFn)
      Ensure stream boundedness by evaluating the cost of incoming elements using a cost function.
      FlowOps log​(java.lang.String name, scala.Function1<Out,​java.lang.Object> extract, LoggingAdapter log)
      Logs elements flowing through the stream as well as completion and erroring.
      scala.Function1<Out,​java.lang.Object> log$default$2()  
      LoggingAdapter log$default$3​(java.lang.String name, scala.Function1<Out,​java.lang.Object> extract)  
      FlowOps logWithMarker​(java.lang.String name, scala.Function1<Out,​LogMarker> marker, scala.Function1<Out,​java.lang.Object> extract, MarkerLoggingAdapter log)
      Logs elements flowing through the stream as well as completion and erroring.
      scala.Function1<Out,​java.lang.Object> logWithMarker$default$3()  
      MarkerLoggingAdapter logWithMarker$default$4​(java.lang.String name, scala.Function1<Out,​LogMarker> marker, scala.Function1<Out,​java.lang.Object> extract)  
      <T> FlowOps map​(scala.Function1<Out,​T> f)
      Transform this stream by applying the given function to each of the elements as they pass through this processing step.
      <T> FlowOps mapAsync​(int parallelism, scala.Function1<Out,​scala.concurrent.Future<T>> f)
      Transform this stream by applying the given function to each of the elements as they pass through this processing step.
      <T> FlowOps mapAsyncUnordered​(int parallelism, scala.Function1<Out,​scala.concurrent.Future<T>> f)
      Transform this stream by applying the given function to each of the elements as they pass through this processing step.
      <T> FlowOps mapConcat​(scala.Function1<Out,​scala.collection.IterableOnce<T>> f)
      Transform each input element into an Iterable of output elements that is then flattened into the output stream.
      FlowOps mapError​(scala.PartialFunction<java.lang.Throwable,​java.lang.Throwable> pf)
      While similar to <T>recover(scala.PartialFunction<java.lang.Throwable,T>) this operator can be used to transform an error signal to a different one *without* logging it as an error in the process.
      <U,​M>
      FlowOps
      merge​(Graph<SourceShape<U>,​M> that, boolean eagerComplete)
      Merge the given Source to this Flow, taking elements as they arrive from input streams, picking randomly when several elements ready.
      <U,​M>
      boolean
      merge$default$2()  
      <U> FlowOps mergeAll​(scala.collection.immutable.Seq<Graph<SourceShape<U>,​?>> those, boolean eagerComplete)
      Merge the given Sources to this Flow, taking elements as they arrive from input streams, picking randomly when several elements ready.
      <U,​M>
      Graph<FlowShape<Out,​U>,​M>
      mergeGraph​(Graph<SourceShape<U>,​M> that, boolean eagerComplete)  
      <U,​M>
      FlowOps
      mergeLatest​(Graph<SourceShape<U>,​M> that, boolean eagerComplete)
      MergeLatest joins elements from N input streams into stream of lists of size N.
      <U,​M>
      boolean
      mergeLatest$default$2()  
      <U,​M>
      Graph<FlowShape<Out,​scala.collection.immutable.Seq<U>>,​M>
      mergeLatestGraph​(Graph<SourceShape<U>,​M> that, boolean eagerComplete)  
      <U,​M>
      FlowOps
      mergePreferred​(Graph<SourceShape<U>,​M> that, boolean preferred, boolean eagerComplete)
      Merge two sources.
      <U,​M>
      boolean
      mergePreferred$default$3()  
      <U,​M>
      Graph<FlowShape<Out,​U>,​M>
      mergePreferredGraph​(Graph<SourceShape<U>,​M> that, boolean preferred, boolean eagerComplete)  
      <U,​M>
      FlowOps
      mergePrioritized​(Graph<SourceShape<U>,​M> that, int leftPriority, int rightPriority, boolean eagerComplete)
      Merge two sources.
      <U,​M>
      boolean
      mergePrioritized$default$4()  
      <U,​M>
      Graph<FlowShape<Out,​U>,​M>
      mergePrioritizedGraph​(Graph<SourceShape<U>,​M> that, int leftPriority, int rightPriority, boolean eagerComplete)  
      <U,​M>
      FlowOps
      mergeSorted​(Graph<SourceShape<U>,​M> that, scala.math.Ordering<U> ord)
      Merge the given Source to this Flow, taking elements as they arrive from input streams, picking always the smallest of the available elements (waiting for one element from each side to be available).
      <U,​M>
      Graph<FlowShape<Out,​U>,​M>
      mergeSortedGraph​(Graph<SourceShape<U>,​M> that, scala.math.Ordering<U> ord)  
      FlowOps named​(java.lang.String name)  
      <U,​Mat2>
      FlowOps
      orElse​(Graph<SourceShape<U>,​Mat2> secondary)
      Provides a secondary source that will be consumed if this stream completes without any elements passing by.
      <U,​Mat2>
      Graph<FlowShape<Out,​U>,​Mat2>
      orElseGraph​(Graph<SourceShape<U>,​Mat2> secondary)  
      <U> FlowOps prefixAndTail​(int n)
      Takes up to n elements from the stream (less than n only if the upstream completes before emitting n elements) and returns a pair containing a strict sequence of the taken element and a stream representing the remaining elements.
      <U,​Mat2>
      FlowOps
      prepend​(Graph<SourceShape<U>,​Mat2> that)
      Prepend the given Source to this Flow, meaning that before elements are generated from this Flow, the Source's elements will be produced until it is exhausted, at which point Flow elements will start being produced.
      <U,​Mat2>
      Graph<FlowShape<Out,​U>,​Mat2>
      prependGraph​(Graph<SourceShape<U>,​Mat2> that, boolean detached)  
      <U,​Mat2>
      FlowOps
      prependLazy​(Graph<SourceShape<U>,​Mat2> that)
      Prepend the given Source to this Flow, meaning that before elements are generated from this Flow, the Source's elements will be produced until it is exhausted, at which point Flow elements will start being produced.
      <T> FlowOps recover​(scala.PartialFunction<java.lang.Throwable,​T> pf)
      Recover allows to send last element on failure and gracefully complete the stream Since the underlying failure signal onError arrives out-of-band, it might jump over existing elements.
      <T> FlowOps recoverWith​(scala.PartialFunction<java.lang.Throwable,​Graph<SourceShape<T>,​NotUsed>> pf)
      RecoverWith allows to switch to alternative Source on flow failure.
      <T> FlowOps recoverWithRetries​(int attempts, scala.PartialFunction<java.lang.Throwable,​Graph<SourceShape<T>,​NotUsed>> pf)
      RecoverWithRetries allows to switch to alternative Source on flow failure.
      <T> FlowOps reduce​(scala.Function2<T,​T,​T> f)
      Similar to fold but uses first element as zero element.
      <T> FlowOps scan​(T zero, scala.Function2<T,​Out,​T> f)
      Similar to fold but is not a terminal operation, emits its current value which starts at zero and then applies the current and next value to the given function f, emitting the next current value.
      <T> FlowOps scanAsync​(T zero, scala.Function2<T,​Out,​scala.concurrent.Future<T>> f)
      Similar to scan but with an asynchronous function, emits its current value which starts at zero and then applies the current and next value to the given function f, emitting a Future that resolves to the next current value.
      FlowOps sliding​(int n, int step)
      Apply a sliding window over the stream and return the windows as groups of elements, with the last group possibly smaller than requested due to end-of-stream.
      int sliding$default$2()  
      SubFlow<Out,​Mat,​FlowOps,​java.lang.Object> splitAfter​(SubstreamCancelStrategy substreamCancelStrategy, scala.Function1<Out,​java.lang.Object> p)
      This operation applies the given predicate to all incoming elements and emits them to a stream of output streams.
      SubFlow<Out,​Mat,​FlowOps,​java.lang.Object> splitAfter​(scala.Function1<Out,​java.lang.Object> p)
      This operation applies the given predicate to all incoming elements and emits them to a stream of output streams.
      SubFlow<Out,​Mat,​FlowOps,​java.lang.Object> splitWhen​(SubstreamCancelStrategy substreamCancelStrategy, scala.Function1<Out,​java.lang.Object> p)
      This operation applies the given predicate to all incoming elements and emits them to a stream of output streams, always beginning a new one with the current element if the given predicate returns true for it.
      SubFlow<Out,​Mat,​FlowOps,​java.lang.Object> splitWhen​(scala.Function1<Out,​java.lang.Object> p)
      This operation applies the given predicate to all incoming elements and emits them to a stream of output streams, always beginning a new one with the current element if the given predicate returns true for it.
      <S,​T>
      FlowOps
      statefulMap​(scala.Function0<S> create, scala.Function2<S,​Out,​scala.Tuple2<S,​T>> f, scala.Function1<S,​scala.Option<T>> onComplete)
      Transform each stream element with the help of a state.
      <T> FlowOps statefulMapConcat​(scala.Function0<scala.Function1<Out,​scala.collection.IterableOnce<T>>> f)
      Transform each input element into an Iterable of output elements that is then flattened into the output stream.
      FlowOps take​(long n)
      Terminate processing (and cancel the upstream publisher) after the given number of elements.
      FlowOps takeWhile​(scala.Function1<Out,​java.lang.Object> p)
      Terminate processing (and cancel the upstream publisher) after predicate returns false for the first time, Due to input buffering some elements may have been requested from upstream publishers that will then not be processed downstream of this step.
      FlowOps takeWhile​(scala.Function1<Out,​java.lang.Object> p, boolean inclusive)
      Terminate processing (and cancel the upstream publisher) after predicate returns false for the first time, including the first failed element iff inclusive is true Due to input buffering some elements may have been requested from upstream publishers that will then not be processed downstream of this step.
      FlowOps takeWithin​(scala.concurrent.duration.FiniteDuration d)
      Terminate processing (and cancel the upstream publisher) after the given duration.
      FlowOps throttle​(int elements, scala.concurrent.duration.FiniteDuration per)
      Sends elements downstream with speed limited to elements/per.
      FlowOps throttle​(int elements, scala.concurrent.duration.FiniteDuration per, int maximumBurst, ThrottleMode mode)
      Sends elements downstream with speed limited to elements/per.
      FlowOps throttle​(int cost, scala.concurrent.duration.FiniteDuration per, int maximumBurst, scala.Function1<Out,​java.lang.Object> costCalculation, ThrottleMode mode)
      Sends elements downstream with speed limited to cost/per.
      FlowOps throttle​(int cost, scala.concurrent.duration.FiniteDuration per, scala.Function1<Out,​java.lang.Object> costCalculation)
      Sends elements downstream with speed limited to cost/per.
      FlowOps throttleEven​(int elements, scala.concurrent.duration.FiniteDuration per, ThrottleMode mode)
      Deprecated.
      Use throttle without `maximumBurst` parameter instead.
      FlowOps throttleEven​(int cost, scala.concurrent.duration.FiniteDuration per, scala.Function1<Out,​java.lang.Object> costCalculation, ThrottleMode mode)
      Deprecated.
      Use throttle without `maximumBurst` parameter instead.
      <Mat2> java.lang.Object to​(Graph<SinkShape<Out>,​Mat2> sink)
      Connect this Flow to a Sink, concatenating the processing steps of both.
      <T,​Mat2>
      FlowOps
      via​(Graph<FlowShape<Out,​T>,​Mat2> flow)  
      FlowOps watch​(ActorRef ref)
      The operator fails with an pekko.stream.WatchedActorTerminatedException if the target actor is terminated.
      FlowOps wireTap​(Graph<SinkShape<Out>,​?> that)
      Attaches the given Sink to this Flow as a wire tap, meaning that elements that pass through will also be sent to the wire-tap Sink, without the latter affecting the mainline flow.
      FlowOps wireTap​(scala.Function1<Out,​scala.runtime.BoxedUnit> f)
      This is a simplified version of wireTap(Sink) that takes only a simple function.
      <M> Graph<FlowShape<Out,​Out>,​M> wireTapGraph​(Graph<SinkShape<Out>,​M> that)  
      FlowOps withAttributes​(Attributes attr)  
      <U> FlowOps zip​(Graph<SourceShape<U>,​?> that)
      Combine the elements of current flow and the given Source into a stream of tuples.
      <U,​A>
      FlowOps
      zipAll​(Graph<SourceShape<U>,​?> that, A thisElem, U thatElem)
      Combine the elements of current flow and the given Source into a stream of tuples.
      <U,​A,​Mat2>
      Flow<Out,​scala.Tuple2<A,​U>,​Mat2>
      zipAllFlow​(Graph<SourceShape<U>,​Mat2> that, A thisElem, U thatElem)  
      <U,​M>
      Graph<FlowShape<Out,​scala.Tuple2<Out,​U>>,​M>
      zipGraph​(Graph<SourceShape<U>,​M> that)  
      <U> FlowOps zipLatest​(Graph<SourceShape<U>,​?> that)
      Combine the elements of 2 streams into a stream of tuples, picking always the latest element of each.
      <U,​M>
      Graph<FlowShape<Out,​scala.Tuple2<Out,​U>>,​M>
      zipLatestGraph​(Graph<SourceShape<U>,​M> that)  
      <Out2,​Out3>
      FlowOps
      zipLatestWith​(Graph<SourceShape<Out2>,​?> that, boolean eagerComplete, scala.Function2<Out,​Out2,​Out3> combine)
      Combine the elements of multiple streams into a stream of combined elements using a combiner function, picking always the latest of the elements of each source.
      <Out2,​Out3>
      FlowOps
      zipLatestWith​(Graph<SourceShape<Out2>,​?> that, scala.Function2<Out,​Out2,​Out3> combine)
      Combine the elements of multiple streams into a stream of combined elements using a combiner function, picking always the latest of the elements of each source.
      <Out2,​Out3,​M>
      Graph<FlowShape<Out,​Out3>,​M>
      zipLatestWithGraph​(Graph<SourceShape<Out2>,​M> that, boolean eagerComplete, scala.Function2<Out,​Out2,​Out3> combine)  
      <Out2,​Out3,​M>
      Graph<FlowShape<Out,​Out3>,​M>
      zipLatestWithGraph​(Graph<SourceShape<Out2>,​M> that, scala.Function2<Out,​Out2,​Out3> combine)  
      <Out2,​Out3>
      FlowOps
      zipWith​(Graph<SourceShape<Out2>,​?> that, scala.Function2<Out,​Out2,​Out3> combine)
      Put together the elements of current flow and the given Source into a stream of combined elements using a combiner function.
      <Out2,​Out3,​M>
      Graph<FlowShape<Out,​Out3>,​M>
      zipWithGraph​(Graph<SourceShape<Out2>,​M> that, scala.Function2<Out,​Out2,​Out3> combine)  
      FlowOps zipWithIndex()
      Combine the elements of current flow into a stream of tuples consisting of all elements paired with their index.
    • Method Detail

      • aggregateWithBoundary

        <Agg,​Emit> FlowOps aggregateWithBoundary​(scala.Function0<Agg> allocate,
                                                       scala.Function2<Agg,​Out,​scala.Tuple2<Agg,​java.lang.Object>> aggregate,
                                                       scala.Function1<Agg,​Emit> harvest,
                                                       scala.Option<scala.Tuple2<scala.Function1<Agg,​java.lang.Object>,​scala.concurrent.duration.FiniteDuration>> emitOnTimer)
        Aggregate input elements into an arbitrary data structure that can be completed and emitted downstream when custom condition is met which can be triggered by aggregate or timer. It can be thought of a more general groupedWeightedWithin(long,scala.concurrent.duration.FiniteDuration,scala.Function1<Out,java.lang.Object>).

        '''Emits when''' the aggregation function decides the aggregate is complete or the timer function returns true

        '''Backpressures when''' downstream backpressures and the aggregate is complete

        '''Completes when''' upstream completes and the last aggregate has been emitted downstream

        '''Cancels when''' downstream cancels

        Parameters:
        allocate - allocate the initial data structure for aggregated elements
        aggregate - update the aggregated elements, return true if ready to emit after update.
        harvest - this is invoked before emit within the current stage/operator
        emitOnTimer - decide whether the current aggregated elements can be emitted, the custom function is invoked on every interval
      • alsoTo

        FlowOps alsoTo​(Graph<SinkShape<Out>,​?> that)
        Attaches the given Sink to this Source, meaning that elements that pass through will also be sent to the Sink.

        It is similar to wireTap(scala.Function1<Out, scala.runtime.BoxedUnit>) but will backpressure instead of dropping elements when the given Sink is not ready.

        '''Emits when''' element is available and demand exists both from the Sink and the downstream.

        '''Backpressures when''' downstream or Sink backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream or Sink cancels

      • alsoToAll

        FlowOps alsoToAll​(scala.collection.immutable.Seq<Graph<SinkShape<Out>,​?>> those)
        Attaches the given Sinks to this Source, meaning that elements that pass through will also be sent to the Sink.

        It is similar to wireTap(scala.Function1<Out, scala.runtime.BoxedUnit>) but will backpressure instead of dropping elements when the given Sinks is not ready.

        '''Emits when''' element is available and demand exists both from the Sinks and the downstream.

        '''Backpressures when''' downstream or any of the Sinks backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream or any of the Sinks cancels

      • ask

        <S> FlowOps ask​(ActorRef ref,
                        Timeout timeout,
                        scala.reflect.ClassTag<S> tag)
        Use the ask pattern to send a request-reply message to the target ref actor. If any of the asks times out it will fail the stream with a pekko.pattern.AskTimeoutException.

        Do not forget to include the expected response type in the method call, like so:

        
         flow.ask[ExpectedReply](ref)
         

        otherwise Nothing will be assumed, which is most likely not what you want.

        Defaults to parallelism of 2 messages in flight, since while one ask message may be being worked on, the second one still be in the mailbox, so defaulting to sending the second one a bit earlier than when first ask has replied maintains a slightly healthier throughput.

        Similar to the plain ask pattern, the target actor is allowed to reply with org.apache.pekko.util.Status. An org.apache.pekko.util.Status#Failure will cause the operator to fail with the cause carried in the Failure message.

        The operator fails with an pekko.stream.WatchedActorTerminatedException if the target actor is terminated.

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        '''Emits when''' the futures (in submission order) created by the ask pattern internally are completed

        '''Backpressures when''' the number of futures reaches the configured parallelism and the downstream backpressures

        '''Completes when''' upstream completes and all futures have been completed and all elements have been emitted

        '''Fails when''' the passed in actor terminates, or a timeout is exceeded in any of the asks performed

        '''Cancels when''' downstream cancels

      • ask

        <S> FlowOps ask​(int parallelism,
                        ActorRef ref,
                        Timeout timeout,
                        scala.reflect.ClassTag<S> tag)
        Use the ask pattern to send a request-reply message to the target ref actor. If any of the asks times out it will fail the stream with a pekko.pattern.AskTimeoutException.

        Do not forget to include the expected response type in the method call, like so:

        
         flow.ask[ExpectedReply](parallelism = 4)(ref)
         

        otherwise Nothing will be assumed, which is most likely not what you want.

        Parallelism limits the number of how many asks can be "in flight" at the same time. Please note that the elements emitted by this operator are in-order with regards to the asks being issued (i.e. same behavior as mapAsync).

        The operator fails with an pekko.stream.WatchedActorTerminatedException if the target actor is terminated, or with an TimeoutException in case the ask exceeds the timeout passed in.

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        '''Emits when''' the futures (in submission order) created by the ask pattern internally are completed

        '''Backpressures when''' the number of futures reaches the configured parallelism and the downstream backpressures

        '''Completes when''' upstream completes and all futures have been completed and all elements have been emitted

        '''Fails when''' the passed in actor terminates, or a timeout is exceeded in any of the asks performed

        '''Cancels when''' downstream cancels

      • async

        FlowOps async()
        Put an asynchronous boundary around this Flow.

        If this is a SubFlow (created e.g. by groupBy), this creates an asynchronous boundary around each materialized sub-flow, not the super-flow. That way, the super-flow will communicate with sub-flows asynchronously.

      • backpressureTimeout

        FlowOps backpressureTimeout​(scala.concurrent.duration.FiniteDuration timeout)
        If the time between the emission of an element and the following downstream demand exceeds the provided timeout, the stream is failed with a scala.concurrent.TimeoutException. The timeout is checked periodically, so the resolution of the check is one period (equals to timeout value).

        '''Emits when''' upstream emits an element

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes or fails if timeout elapses between element emission and downstream demand.

        '''Cancels when''' downstream cancels

      • batch

        <S> FlowOps batch​(long max,
                          scala.Function1<Out,​S> seed,
                          scala.Function2<S,​Out,​S> aggregate)
        Allows a faster upstream to progress independently of a slower subscriber by aggregating elements into batches until the subscriber is ready to accept them. For example a batch step might store received elements in an array up to the allowed max limit if the upstream publisher is faster.

        This only rolls up elements if the upstream is faster, but if the downstream is faster it will not duplicate elements.

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        '''Emits when''' downstream stops backpressuring and there is an aggregated element available

        '''Backpressures when''' there are max batched elements and 1 pending element and downstream backpressures

        '''Completes when''' upstream completes and there is no batched/pending element waiting

        '''Cancels when''' downstream cancels

        See also FlowOps.conflateWithSeed, FlowOps.batchWeighted

        Parameters:
        max - maximum number of elements to batch before backpressuring upstream (must be positive non-zero)
        seed - Provides the first state for a batched value using the first unconsumed element as a start
        aggregate - Takes the currently batched value and the current pending element to produce a new aggregate
      • batchWeighted

        <S> FlowOps batchWeighted​(long max,
                                  scala.Function1<Out,​java.lang.Object> costFn,
                                  scala.Function1<Out,​S> seed,
                                  scala.Function2<S,​Out,​S> aggregate)
        Allows a faster upstream to progress independently of a slower subscriber by aggregating elements into batches until the subscriber is ready to accept them. For example a batch step might concatenate ByteString elements up to the allowed max limit if the upstream publisher is faster.

        This element only rolls up elements if the upstream is faster, but if the downstream is faster it will not duplicate elements.

        Batching will apply for all elements, even if a single element cost is greater than the total allowed limit. In this case, previous batched elements will be emitted, then the "heavy" element will be emitted (after being applied with the seed function) without batching further elements with it, and then the rest of the incoming elements are batched.

        '''Emits when''' downstream stops backpressuring and there is a batched element available

        '''Backpressures when''' there are max weighted batched elements + 1 pending element and downstream backpressures

        '''Completes when''' upstream completes and there is no batched/pending element waiting

        '''Cancels when''' downstream cancels

        See also FlowOps.conflateWithSeed, FlowOps.batch

        Parameters:
        max - maximum weight of elements to batch before backpressuring upstream (must be positive non-zero)
        costFn - a function to compute a single element weight
        seed - Provides the first state for a batched value using the first unconsumed element as a start
        aggregate - Takes the currently batched value and the current pending element to produce a new batch
      • buffer

        FlowOps buffer​(int size,
                       OverflowStrategy overflowStrategy)
        Adds a fixed size buffer in the flow that allows to store elements from a faster upstream until it becomes full. Depending on the defined pekko.stream.OverflowStrategy it might drop elements or backpressure the upstream if there is no space available

        '''Emits when''' downstream stops backpressuring and there is a pending element in the buffer

        '''Backpressures when''' downstream backpressures or depending on OverflowStrategy:

        • Backpressure - backpressures when buffer is full
        • DropHead, DropTail, DropBuffer - never backpressures
        • Fail - fails the stream if buffer gets full

        '''Completes when''' upstream completes and buffered elements have been drained

        '''Cancels when''' downstream cancels

        Parameters:
        size - The size of the buffer in element count
        overflowStrategy - Strategy that is used when incoming elements cannot fit inside the buffer
      • collect

        <T> FlowOps collect​(scala.PartialFunction<Out,​T> pf)
        Transform this stream by applying the given partial function to each of the elements on which the function is defined as they pass through this processing step. Non-matching elements are filtered out.

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        '''Emits when''' the provided partial function is defined for the element

        '''Backpressures when''' the partial function is defined for the element and downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

      • collectType

        <T> FlowOps collectType​(scala.reflect.ClassTag<T> tag)
        Transform this stream by testing the type of each of the elements on which the element is an instance of the provided type as they pass through this processing step.

        Non-matching elements are filtered out.

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        '''Emits when''' the element is an instance of the provided type

        '''Backpressures when''' the element is an instance of the provided type and downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

      • completionTimeout

        FlowOps completionTimeout​(scala.concurrent.duration.FiniteDuration timeout)
        If the completion of the stream does not happen until the provided timeout, the stream is failed with a scala.concurrent.TimeoutException.

        '''Emits when''' upstream emits an element

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes or fails if timeout elapses before upstream completes

        '''Cancels when''' downstream cancels

      • concat

        <U,​Mat2> FlowOps concat​(Graph<SourceShape<U>,​Mat2> that)
        Concatenate the given Source to this Flow, meaning that once this Flow&rsquo;s input is exhausted and all result elements have been generated, the Source&rsquo;s elements will be produced.

        Note that the Source is materialized together with this Flow and is "detached" meaning it will in effect behave as a one element buffer in front of both the sources, that eagerly demands an element on start (so it can not be combined with Source.lazy to defer materialization of that).

        The second source is then kept from producing elements by asserting back-pressure until its time comes.

        When needing a concat operator that is not detached use concatLazy(org.apache.pekko.stream.Graph<org.apache.pekko.stream.SourceShape<U>, Mat2>)

        If this Flow gets upstream error - no elements from the given Source will be pulled.

        '''Emits when''' element is available from current stream or from the given Source when current is completed

        '''Backpressures when''' downstream backpressures

        '''Completes when''' given Source completes

        '''Cancels when''' downstream cancels

      • concatAllLazy

        <U> FlowOps concatAllLazy​(scala.collection.immutable.Seq<Graph<SourceShape<U>,​?>> those)
        Concatenate the given Sources to this Flow, meaning that once this Flow&rsquo;s input is exhausted and all result elements have been generated, the Sources' elements will be produced.

        Note that the Sources are materialized together with this Flow. If lazy materialization is what is needed the operator can be combined with for example Source.lazySource to defer materialization of that until the time when this source completes.

        The second source is then kept from producing elements by asserting back-pressure until its time comes.

        For a concat operator that is detached, use concat(org.apache.pekko.stream.Graph<org.apache.pekko.stream.SourceShape<U>, Mat2>)

        If this Flow gets upstream error - no elements from the given Sources will be pulled.

        '''Emits when''' element is available from current stream or from the given Sources when current is completed

        '''Backpressures when''' downstream backpressures

        '''Completes when''' given all those Sources completes

        '''Cancels when''' downstream cancels

      • concatLazy

        <U,​Mat2> FlowOps concatLazy​(Graph<SourceShape<U>,​Mat2> that)
        Concatenate the given Source to this Flow, meaning that once this Flow&rsquo;s input is exhausted and all result elements have been generated, the Source&rsquo;s elements will be produced.

        Note that the Source is materialized together with this Flow. If lazy materialization is what is needed the operator can be combined with for example Source.lazySource to defer materialization of that until the time when this source completes.

        The second source is then kept from producing elements by asserting back-pressure until its time comes.

        For a concat operator that is detached, use concat(org.apache.pekko.stream.Graph<org.apache.pekko.stream.SourceShape<U>, Mat2>)

        If this Flow gets upstream error - no elements from the given Source will be pulled.

        '''Emits when''' element is available from current stream or from the given Source when current is completed

        '''Backpressures when''' downstream backpressures

        '''Completes when''' given Source completes

        '''Cancels when''' downstream cancels

      • conflate

        <O2> FlowOps conflate​(scala.Function2<O2,​O2,​O2> aggregate)
        Allows a faster upstream to progress independently of a slower subscriber by conflating elements into a summary until the subscriber is ready to accept them. For example a conflate step might average incoming numbers if the upstream publisher is faster.

        This version of conflate does not change the output type of the stream. See FlowOps.conflateWithSeed for a more flexible version that can take a seed function and transform elements while rolling up.

        This element only rolls up elements if the upstream is faster, but if the downstream is faster it will not duplicate elements.

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        '''Emits when''' downstream stops backpressuring and there is a conflated element available

        '''Backpressures when''' never

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

        Parameters:
        aggregate - Takes the currently aggregated value and the current pending element to produce a new aggregate

        See also FlowOps.conflate, FlowOps.limit, FlowOps.limitWeighted FlowOps.batch FlowOps.batchWeighted

      • conflateWithSeed

        <S> FlowOps conflateWithSeed​(scala.Function1<Out,​S> seed,
                                     scala.Function2<S,​Out,​S> aggregate)
        Allows a faster upstream to progress independently of a slower subscriber by conflating elements into a summary until the subscriber is ready to accept them. For example a conflate step might average incoming numbers if the upstream publisher is faster.

        This version of conflate allows to derive a seed from the first element and change the aggregated type to be different than the input type. See FlowOps.conflate for a simpler version that does not change types.

        This element only rolls up elements if the upstream is faster, but if the downstream is faster it will not duplicate elements.

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        '''Emits when''' downstream stops backpressuring and there is a conflated element available

        '''Backpressures when''' never

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

        Parameters:
        seed - Provides the first state for a conflated value using the first unconsumed element as a start
        aggregate - Takes the currently aggregated value and the current pending element to produce a new aggregate

        See also FlowOps.conflate, FlowOps.limit, FlowOps.limitWeighted FlowOps.batch FlowOps.batchWeighted

      • delay

        FlowOps delay​(scala.concurrent.duration.FiniteDuration of,
                      DelayOverflowStrategy strategy)
        Shifts elements emission in time by a specified amount. It allows to store elements in internal buffer while waiting for next element to be emitted. Depending on the defined pekko.stream.DelayOverflowStrategy it might drop elements or backpressure the upstream if there is no space available in the buffer.

        Delay precision is 10ms to avoid unnecessary timer scheduling cycles

        Internal buffer has default capacity 16. You can set buffer size by calling addAttributes(inputBuffer)

        '''Emits when''' there is a pending element in the buffer and configured time for this element elapsed * EmitEarly - strategy do not wait to emit element if buffer is full

        '''Backpressures when''' depending on OverflowStrategy * Backpressure - backpressures when buffer is full * DropHead, DropTail, DropBuffer - never backpressures * Fail - fails the stream if buffer gets full

        '''Completes when''' upstream completes and buffered elements have been drained

        '''Cancels when''' downstream cancels

        Parameters:
        of - time to shift all messages
        strategy - Strategy that is used when incoming elements cannot fit inside the buffer
      • delayWith

        FlowOps delayWith​(scala.Function0<DelayStrategy<Out>> delayStrategySupplier,
                          DelayOverflowStrategy overFlowStrategy)
        Shifts elements emission in time by an amount individually determined through delay strategy a specified amount. It allows to store elements in internal buffer while waiting for next element to be emitted. Depending on the defined pekko.stream.DelayOverflowStrategy it might drop elements or backpressure the upstream if there is no space available in the buffer.

        It determines delay for each ongoing element invoking DelayStrategy.nextDelay(elem: T): FiniteDuration.

        Note that elements are not re-ordered: if an element is given a delay much shorter than its predecessor, it will still have to wait for the preceding element before being emitted. It is also important to notice that scaladsl.DelayStrategy can be stateful.

        Delay precision is 10ms to avoid unnecessary timer scheduling cycles.

        Internal buffer has default capacity 16. You can set buffer size by calling addAttributes(inputBuffer)

        '''Emits when''' there is a pending element in the buffer and configured time for this element elapsed * EmitEarly - strategy do not wait to emit element if buffer is full

        '''Backpressures when''' depending on OverflowStrategy * Backpressure - backpressures when buffer is full * DropHead, DropTail, DropBuffer - never backpressures * Fail - fails the stream if buffer gets full

        '''Completes when''' upstream completes and buffered elements have been drained

        '''Cancels when''' downstream cancels

        Parameters:
        delayStrategySupplier - creates new DelayStrategy object for each materialization
        overFlowStrategy - Strategy that is used when incoming elements cannot fit inside the buffer
      • detach

        FlowOps detach()
        Detaches upstream demand from downstream demand without detaching the stream rates; in other words acts like a buffer of size 1.

        '''Emits when''' upstream emits an element

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

      • divertTo

        FlowOps divertTo​(Graph<SinkShape<Out>,​?> that,
                         scala.Function1<Out,​java.lang.Object> when)
        Attaches the given Sink to this Flow, meaning that elements will be sent to the Sink instead of being passed through if the predicate when returns true.

        '''Emits when''' emits when an element is available from the input and the chosen output has demand

        '''Backpressures when''' the currently chosen output back-pressures

        '''Completes when''' upstream completes and no output is pending

        '''Cancels when''' any of the downstreams cancel

      • drop

        FlowOps drop​(long n)
        Discard the given number of elements at the beginning of the stream. No elements will be dropped if n is zero or negative.

        '''Emits when''' the specified number of elements has been dropped already

        '''Backpressures when''' the specified number of elements has been dropped and downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

      • dropWhile

        FlowOps dropWhile​(scala.Function1<Out,​java.lang.Object> p)
        Discard elements at the beginning of the stream while predicate is true. All elements will be taken after predicate returns false first time.

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        '''Emits when''' predicate returned false and for all following stream elements

        '''Backpressures when''' predicate returned false and downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

      • dropWithin

        FlowOps dropWithin​(scala.concurrent.duration.FiniteDuration d)
        Discard the elements received within the given duration at beginning of the stream.

        '''Emits when''' the specified time elapsed and a new upstream element arrives

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

      • expand

        <U> FlowOps expand​(scala.Function1<Out,​scala.collection.Iterator<U>> expander)
        Allows a faster downstream to progress independently of a slower upstream by extrapolating elements from an older element until new element comes from the upstream. For example an expand step might repeat the last element for the subscriber until it receives an update from upstream.

        This element will never "drop" upstream elements as all elements go through at least one extrapolation step. This means that if the upstream is actually faster than the upstream it will be backpressured by the downstream subscriber.

        Expand does not support pekko.stream.Supervision.Restart and pekko.stream.Supervision.Resume. Exceptions from the seed function will complete the stream with failure.

        '''Emits when''' downstream stops backpressuring

        '''Backpressures when''' downstream backpressures or iterator runs empty

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

        Parameters:
        expander - Takes the current extrapolation state to produce an output element and the next extrapolation state.
      • extrapolate

        <U> FlowOps extrapolate​(scala.Function1<U,​scala.collection.Iterator<U>> extrapolator,
                                scala.Option<U> initial)
        Allows a faster downstream to progress independent of a slower upstream.

        This is achieved by introducing "extrapolated" elements - based on those from upstream - whenever downstream signals demand.

        Extrapolate does not support pekko.stream.Supervision.Restart and pekko.stream.Supervision.Resume. Exceptions from the extrapolate function will complete the stream with failure.

        '''Emits when''' downstream stops backpressuring, AND EITHER upstream emits OR initial element is present OR extrapolate is non-empty and applicable

        '''Backpressures when''' downstream backpressures or current extrapolate runs empty

        '''Completes when''' upstream completes and current extrapolate runs empty

        '''Cancels when''' downstream cancels

        Parameters:
        extrapolator - takes the current upstream element and provides a sequence of "extrapolated" elements based on the original, to be emitted in case downstream signals demand.
        initial - the initial element to be emitted, in case upstream is able to stall the entire stream.
      • extrapolate$default$2

        <U> scala.None$ extrapolate$default$2()
      • filter

        FlowOps filter​(scala.Function1<Out,​java.lang.Object> p)
        Only pass on those elements that satisfy the given predicate.

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        '''Emits when''' the given predicate returns true for the element

        '''Backpressures when''' the given predicate returns true for the element and downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

      • filterNot

        FlowOps filterNot​(scala.Function1<Out,​java.lang.Object> p)
        Only pass on those elements that NOT satisfy the given predicate.

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        '''Emits when''' the given predicate returns false for the element

        '''Backpressures when''' the given predicate returns false for the element and downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

      • flatMapConcat

        <T,​M> FlowOps flatMapConcat​(scala.Function1<Out,​Graph<SourceShape<T>,​M>> f)
        Transform each input element into a Source of output elements that is then flattened into the output stream by concatenation, fully consuming one Source after the other.

        '''Emits when''' a currently consumed substream has an element available

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes and all consumed substreams complete

        '''Cancels when''' downstream cancels

      • flatMapMerge

        <T,​M> FlowOps flatMapMerge​(int breadth,
                                         scala.Function1<Out,​Graph<SourceShape<T>,​M>> f)
        Transform each input element into a Source of output elements that is then flattened into the output stream by merging, where at most breadth substreams are being consumed at any given time.

        '''Emits when''' a currently consumed substream has an element available

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes and all consumed substreams complete

        '''Cancels when''' downstream cancels

      • flatMapPrefix

        <Out2,​Mat2> FlowOps flatMapPrefix​(int n,
                                                scala.Function1<scala.collection.immutable.Seq<Out>,​Flow<Out,​Out2,​Mat2>> f)
        Takes up to n elements from the stream (less than n only if the upstream completes before emitting n elements), then apply f on these elements in order to obtain a flow, this flow is then materialized and the rest of the input is processed by this flow (similar to via). This method returns a flow consuming the rest of the stream producing the materialized flow's output.

        '''Emits when''' the materialized flow emits. Notice the first n elements are buffered internally before materializing the flow and connecting it to the rest of the upstream - producing elements at its own discretion (might 'swallow' or multiply elements).

        '''Backpressures when''' the materialized flow backpressures

        '''Completes when''' the materialized flow completes. If upstream completes before producing n elements, f will be applied with the provided elements, the resulting flow will be materialized and signalled for upstream completion, it can then complete or continue to emit elements at its own discretion.

        '''Cancels when''' the materialized flow cancels. When downstream cancels before materialization of the nested flow, the operator's default behavior is to cancel immediately, this behavior can be controlled by setting the pekko.stream.Attributes.NestedMaterializationCancellationPolicy attribute on the flow. When this attribute is configured to true, downstream cancellation is delayed until the nested flow's materialization which is then immediately cancelled (with the original cancellation cause).

        Parameters:
        n - the number of elements to accumulate before materializing the downstream flow.
        f - a function that produces the downstream flow based on the upstream's prefix.
      • fold

        <T> FlowOps fold​(T zero,
                         scala.Function2<T,​Out,​T> f)
        Similar to scan but only emits its result when the upstream completes, after which it also completes. Applies the given function towards its current and next value, yielding the next current value.

        If the function f throws an exception and the supervision decision is pekko.stream.Supervision.Restart current value starts at zero again the stream will continue.

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        Note that the zero value must be immutable.

        '''Emits when''' upstream completes

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

        See also FlowOps.scan

      • foldAsync

        <T> FlowOps foldAsync​(T zero,
                              scala.Function2<T,​Out,​scala.concurrent.Future<T>> f)
        Similar to fold but with an asynchronous function. Applies the given function towards its current and next value, yielding the next current value.

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        If the function f returns a failure and the supervision decision is pekko.stream.Supervision.Restart current value starts at zero again the stream will continue.

        Note that the zero value must be immutable.

        '''Emits when''' upstream completes

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

        See also FlowOps.fold

      • groupBy

        <K> SubFlow<Out,​Mat,​FlowOps,​java.lang.Object> groupBy​(int maxSubstreams,
                                                                                scala.Function1<Out,​K> f,
                                                                                boolean allowClosedSubstreamRecreation)
        This operation demultiplexes the incoming stream into separate output streams, one for each element key. The key is computed for each element using the given function. When a new key is encountered for the first time a new substream is opened and subsequently fed with all elements belonging to that key.

        WARNING: If allowClosedSubstreamRecreation is set to false (default behavior) the operator keeps track of all keys of streams that have already been closed. If you expect an infinite number of keys this can cause memory issues. Elements belonging to those keys are drained directly and not send to the substream.

        Note: If allowClosedSubstreamRecreation is set to true substream completion and incoming elements are subject to race-conditions. If elements arrive for a stream that is in the process of closing these elements might get lost.

        The object returned from this method is not a normal Source or Flow, it is a SubFlow. This means that after this operator all transformations are applied to all encountered substreams in the same fashion. Substream mode is exited either by closing the substream (i.e. connecting it to a Sink) or by merging the substreams back together; see the to and mergeBack methods on SubFlow for more information.

        It is important to note that the substreams also propagate back-pressure as any other stream, which means that blocking one substream will block the groupBy operator itself—and thereby all substreams—once all internal or explicit buffers are filled.

        If the group by function f throws an exception and the supervision decision is pekko.stream.Supervision.Stop the stream and substreams will be completed with failure.

        If the group by function f throws an exception and the supervision decision is pekko.stream.Supervision.Resume or pekko.stream.Supervision.Restart the element is dropped and the stream and substreams continue.

        Function f MUST NOT return null. This will throw exception and trigger supervision decision mechanism.

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        '''Emits when''' an element for which the grouping function returns a group that has not yet been created. Emits the new group

        '''Backpressures when''' there is an element pending for a group whose substream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels and all substreams cancel

        Parameters:
        maxSubstreams - configures the maximum number of substreams (keys) that are supported; if more distinct keys are encountered then the stream fails
        f - computes the key for each element
        allowClosedSubstreamRecreation - enables recreation of already closed substreams if elements with their corresponding keys arrive after completion
      • groupBy

        <K> SubFlow<Out,​Mat,​FlowOps,​java.lang.Object> groupBy​(int maxSubstreams,
                                                                                scala.Function1<Out,​K> f)
        This operation demultiplexes the incoming stream into separate output streams, one for each element key. The key is computed for each element using the given function. When a new key is encountered for the first time a new substream is opened and subsequently fed with all elements belonging to that key.

        WARNING: The operator keeps track of all keys of streams that have already been closed. If you expect an infinite number of keys this can cause memory issues. Elements belonging to those keys are drained directly and not send to the substream.

        See Also:
        groupBy(int, scala.Function1<Out, K>, boolean)
      • grouped

        FlowOps grouped​(int n)
        Chunk up this stream into groups of the given size, with the last group possibly smaller than requested due to end-of-stream.

        n must be positive, otherwise IllegalArgumentException is thrown.

        '''Emits when''' the specified number of elements have been accumulated or upstream completed

        '''Backpressures when''' a group has been assembled and downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

      • groupedWeighted

        FlowOps groupedWeighted​(long minWeight,
                                scala.Function1<Out,​java.lang.Object> costFn)
        Chunk up this stream into groups of elements that have a cumulative weight greater than or equal to the minWeight, with the last group possibly smaller than requested minWeight due to end-of-stream.

        minWeight must be positive, otherwise IllegalArgumentException is thrown. costFn must return a non-negative result for all inputs, otherwise the stage will fail with an IllegalArgumentException.

        '''Emits when''' the cumulative weight of elements is greater than or equal to the minWeight or upstream completed

        '''Backpressures when''' a buffered group weighs more than minWeight and downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

      • groupedWeightedWithin

        FlowOps groupedWeightedWithin​(long maxWeight,
                                      scala.concurrent.duration.FiniteDuration d,
                                      scala.Function1<Out,​java.lang.Object> costFn)
        Chunk up this stream into groups of elements received within a time window, or limited by the weight of the elements, whatever happens first. Empty groups will not be emitted if no elements are received from upstream. The last group before end-of-stream will contain the buffered elements since the previously emitted group.

        maxWeight must be positive, and d must be greater than 0 seconds, otherwise IllegalArgumentException is thrown.

        '''Emits when''' the configured time elapses since the last group has been emitted or weight limit reached

        '''Backpressures when''' downstream backpressures, and buffered group (+ pending element) weighs more than maxWeight

        '''Completes when''' upstream completes (emits last group)

        '''Cancels when''' downstream completes

      • groupedWeightedWithin

        FlowOps groupedWeightedWithin​(long maxWeight,
                                      int maxNumber,
                                      scala.concurrent.duration.FiniteDuration d,
                                      scala.Function1<Out,​java.lang.Object> costFn)
        Chunk up this stream into groups of elements received within a time window, or limited by the weight and number of the elements, whatever happens first. Empty groups will not be emitted if no elements are received from upstream. The last group before end-of-stream will contain the buffered elements since the previously emitted group.

        maxWeight must be positive, maxNumber must be positive, and d must be greater than 0 seconds, otherwise IllegalArgumentException is thrown.

        '''Emits when''' the configured time elapses since the last group has been emitted or weight limit reached

        '''Backpressures when''' downstream backpressures, and buffered group (+ pending element) weighs more than maxWeight or has more than maxNumber elements

        '''Completes when''' upstream completes (emits last group)

        '''Cancels when''' downstream completes

      • groupedWithin

        FlowOps groupedWithin​(int n,
                              scala.concurrent.duration.FiniteDuration d)
        Chunk up this stream into groups of elements received within a time window, or limited by the given number of elements, whatever happens first. Empty groups will not be emitted if no elements are received from upstream. The last group before end-of-stream will contain the buffered elements since the previously emitted group.

        n must be positive, and d must be greater than 0 seconds, otherwise IllegalArgumentException is thrown.

        '''Emits when''' the configured time elapses since the last group has been emitted or n elements is buffered

        '''Backpressures when''' downstream backpressures, and there are n+1 buffered elements

        '''Completes when''' upstream completes (emits last group)

        '''Cancels when''' downstream completes

      • idleTimeout

        FlowOps idleTimeout​(scala.concurrent.duration.FiniteDuration timeout)
        If the time between two processed elements exceeds the provided timeout, the stream is failed with a scala.concurrent.TimeoutException. The timeout is checked periodically, so the resolution of the check is one period (equals to timeout value).

        '''Emits when''' upstream emits an element

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes or fails if timeout elapses between two emitted elements

        '''Cancels when''' downstream cancels

      • initialDelay

        FlowOps initialDelay​(scala.concurrent.duration.FiniteDuration delay)
        Delays the initial element by the specified duration.

        '''Emits when''' upstream emits an element if the initial delay is already elapsed

        '''Backpressures when''' downstream backpressures or initial delay is not yet elapsed

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

      • initialTimeout

        FlowOps initialTimeout​(scala.concurrent.duration.FiniteDuration timeout)
        If the first element has not passed through this operator before the provided timeout, the stream is failed with a scala.concurrent.TimeoutException.

        '''Emits when''' upstream emits an element

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes or fails if timeout elapses before first element arrives

        '''Cancels when''' downstream cancels

      • interleave

        <U> FlowOps interleave​(Graph<SourceShape<U>,​?> that,
                               int segmentSize)
        Interleave is a deterministic merge of the given Source with elements of this Flow. It first emits segmentSize number of elements from this flow to downstream, then - same amount for that source, then repeat process.

        Example:

        
         Source(List(1, 2, 3)).interleave(List(4, 5, 6, 7), 2) // 1, 2, 4, 5, 3, 6, 7
         

        After one of upstreams is complete then all the rest elements will be emitted from the second one

        If it gets error from one of upstreams - stream completes with failure.

        '''Emits when''' element is available from the currently consumed upstream

        '''Backpressures when''' downstream backpressures. Signal to current upstream, switch to next upstream when received segmentSize elements

        '''Completes when''' the Flow and given Source completes

        '''Cancels when''' downstream cancels

      • interleave

        <U> FlowOps interleave​(Graph<SourceShape<U>,​?> that,
                               int segmentSize,
                               boolean eagerClose)
        Interleave is a deterministic merge of the given Source with elements of this Flow. It first emits segmentSize number of elements from this flow to downstream, then - same amount for that source, then repeat process.

        If eagerClose is false and one of the upstreams complete the elements from the other upstream will continue passing through the interleave operator. If eagerClose is true and one of the upstream complete interleave will cancel the other upstream and complete itself.

        If it gets error from one of upstreams - stream completes with failure.

        '''Emits when''' element is available from the currently consumed upstream

        '''Backpressures when''' downstream backpressures. Signal to current upstream, switch to next upstream when received segmentSize elements

        '''Completes when''' the Flow and given Source completes

        '''Cancels when''' downstream cancels

      • interleaveAll

        <U> FlowOps interleaveAll​(scala.collection.immutable.Seq<Graph<SourceShape<U>,​?>> those,
                                  int segmentSize,
                                  boolean eagerClose)
        Interleave is a deterministic merge of the given Sources with elements of this Flow. It first emits segmentSize number of elements from this flow to downstream, then - same amount for that source, then repeat process.

        If eagerClose is false and one of the upstreams complete the elements from the other upstream will continue passing through the interleave operator. If eagerClose is true and one of the upstream complete interleave will cancel the other upstream and complete itself.

        If it gets error from one of upstreams - stream completes with failure.

        '''Emits when''' element is available from the currently consumed upstream

        '''Backpressures when''' downstream backpressures. Signal to current upstream, switch to next upstream when received segmentSize elements

        '''Completes when''' the Flow and given Source completes

        '''Cancels when''' downstream cancels

      • interleaveGraph$default$3

        <U,​M> boolean interleaveGraph$default$3()
      • intersperse

        <T> FlowOps intersperse​(T start,
                                T inject,
                                T 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:

        
         val nums = Source(List(1,2,3)).map(_.toString)
         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(">> ") ++ Source(List("1", "2", "3")).intersperse(",")
         Source(List("1", "2", "3")).intersperse(",") ++ 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

      • intersperse

        <T> FlowOps intersperse​(T inject)
        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:

        
         val nums = Source(List(1,2,3)).map(_.toString)
         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

      • keepAlive

        <U> FlowOps keepAlive​(scala.concurrent.duration.FiniteDuration maxIdle,
                              scala.Function0<U> injectedElem)
        Injects additional elements if upstream does not emit for a configured amount of time. In other words, this operator attempts to maintains a base rate of emitted elements towards the downstream.

        If the downstream backpressures then no element is injected until downstream demand arrives. Injected elements do not accumulate during this period.

        Upstream elements are always preferred over injected elements.

        '''Emits when''' upstream emits an element or if the upstream was idle for the configured period

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

      • limit

        FlowOps limit​(long max)
        Ensure stream boundedness by limiting the number of elements from upstream. If the number of incoming elements exceeds max, it will signal upstream failure StreamLimitException downstream.

        Due to input buffering some elements may have been requested from upstream publishers that will then not be processed downstream of this step.

        '''Emits when''' upstream emits and the number of emitted elements has not reached max

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes and the number of emitted elements has not reached max

        '''Errors when''' the total number of incoming element exceeds max

        '''Cancels when''' downstream cancels

        See also FlowOps.take, FlowOps.takeWithin, FlowOps.takeWhile

      • limitWeighted

        <T> FlowOps limitWeighted​(long max,
                                  scala.Function1<Out,​java.lang.Object> costFn)
        Ensure stream boundedness by evaluating the cost of incoming elements using a cost function. Exactly how many elements will be allowed to travel downstream depends on the evaluated cost of each element. If the accumulated cost exceeds max, it will signal upstream failure StreamLimitException downstream.

        Due to input buffering some elements may have been requested from upstream publishers that will then not be processed downstream of this step.

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        '''Emits when''' upstream emits and the accumulated cost has not reached max

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes and the number of emitted elements has not reached max

        '''Errors when''' when the accumulated cost exceeds max

        '''Cancels when''' downstream cancels

        See also FlowOps.take, FlowOps.takeWithin, FlowOps.takeWhile

      • log

        FlowOps log​(java.lang.String name,
                    scala.Function1<Out,​java.lang.Object> extract,
                    LoggingAdapter log)
        Logs elements flowing through the stream as well as completion and erroring.

        By default element and completion signals are logged on debug level, and errors are logged on Error level. This can be adjusted according to your needs by providing a custom Attributes.LogLevels attribute on the given Flow:

        Uses implicit LoggingAdapter if available, otherwise uses an internally created one, which uses org.apache.pekko.event.Logging(materializer.system, materializer) as its source (use this class to configure slf4j loggers).

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        '''Emits when''' the mapping function returns an element

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

      • log$default$2

        scala.Function1<Out,​java.lang.Object> log$default$2()
      • log$default$3

        LoggingAdapter log$default$3​(java.lang.String name,
                                     scala.Function1<Out,​java.lang.Object> extract)
      • logWithMarker

        FlowOps logWithMarker​(java.lang.String name,
                              scala.Function1<Out,​LogMarker> marker,
                              scala.Function1<Out,​java.lang.Object> extract,
                              MarkerLoggingAdapter log)
        Logs elements flowing through the stream as well as completion and erroring.

        By default element and completion signals are logged on debug level, and errors are logged on Error level. This can be adjusted according to your needs by providing a custom Attributes.LogLevels attribute on the given Flow:

        Uses implicit MarkerLoggingAdapter if available, otherwise uses an internally created one, which uses org.apache.pekko.event.Logging.withMarker(materializer.system, materializer) as its source (use this class to configure slf4j loggers).

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        '''Emits when''' the mapping function returns an element

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

      • logWithMarker$default$3

        scala.Function1<Out,​java.lang.Object> logWithMarker$default$3()
      • logWithMarker$default$4

        MarkerLoggingAdapter logWithMarker$default$4​(java.lang.String name,
                                                     scala.Function1<Out,​LogMarker> marker,
                                                     scala.Function1<Out,​java.lang.Object> extract)
      • map

        <T> FlowOps map​(scala.Function1<Out,​T> f)
        Transform this stream by applying the given function to each of the elements as they pass through this processing step.

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        '''Emits when''' the mapping function returns an element

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

      • mapAsync

        <T> FlowOps mapAsync​(int parallelism,
                             scala.Function1<Out,​scala.concurrent.Future<T>> f)
        Transform this stream by applying the given function to each of the elements as they pass through this processing step. The function returns a Future and the value of that future will be emitted downstream. The number of Futures that shall run in parallel is given as the first argument to mapAsync. These Futures may complete in any order, but the elements that are emitted downstream are in the same order as received from upstream.

        If the function f throws an exception or if the Future is completed with failure and the supervision decision is pekko.stream.Supervision.Stop the stream will be completed with failure.

        If the function f throws an exception or if the Future is completed with failure and the supervision decision is pekko.stream.Supervision.Resume or pekko.stream.Supervision.Restart or the Future completed with null, the element is dropped and the stream continues.

        The function f is always invoked on the elements in the order they arrive.

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        '''Emits when''' the Future returned by the provided function finishes for the next element in sequence

        '''Backpressures when''' the number of futures reaches the configured parallelism and the downstream backpressures or the first future is not completed

        '''Completes when''' upstream completes and all futures have been completed and all elements have been emitted

        '''Cancels when''' downstream cancels

        See Also:
        mapAsyncUnordered(int, scala.Function1<Out, scala.concurrent.Future<T>>)
      • mapAsyncUnordered

        <T> FlowOps mapAsyncUnordered​(int parallelism,
                                      scala.Function1<Out,​scala.concurrent.Future<T>> f)
        Transform this stream by applying the given function to each of the elements as they pass through this processing step. The function returns a Future and the value of that future will be emitted downstream. The number of Futures that shall run in parallel is given as the first argument to mapAsyncUnordered. Each processed element will be emitted downstream as soon as it is ready, i.e. it is possible that the elements are not emitted downstream in the same order as received from upstream.

        If the function f throws an exception or if the Future is completed with failure and the supervision decision is pekko.stream.Supervision.Stop the stream will be completed with failure.

        If the function f throws an exception or if the Future is completed with failure and the supervision decision is pekko.stream.Supervision.Resume or pekko.stream.Supervision.Restart or the Future completed with null, the element is dropped and the stream continues.

        The function f is always invoked on the elements in the order they arrive (even though the result of the futures returned by f might be emitted in a different order).

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        '''Emits when''' any of the Futures returned by the provided function complete

        '''Backpressures when''' the number of futures reaches the configured parallelism and the downstream backpressures

        '''Completes when''' upstream completes and all futures have been completed and all elements have been emitted

        '''Cancels when''' downstream cancels

        See Also:
        mapAsync(int, scala.Function1<Out, scala.concurrent.Future<T>>)
      • mapConcat

        <T> FlowOps mapConcat​(scala.Function1<Out,​scala.collection.IterableOnce<T>> f)
        Transform each input element into an Iterable of output elements that is then flattened into the output stream.

        The returned Iterable MUST NOT contain null values, as they are illegal as stream elements - according to the Reactive Streams specification.

        '''Emits when''' the mapping function returns an element or there are still remaining elements from the previously calculated collection

        '''Backpressures when''' downstream backpressures or there are still remaining elements from the previously calculated collection

        '''Completes when''' upstream completes and all remaining elements have been emitted

        '''Cancels when''' downstream cancels

      • mapError

        FlowOps mapError​(scala.PartialFunction<java.lang.Throwable,​java.lang.Throwable> pf)
        While similar to <T>recover(scala.PartialFunction<java.lang.Throwable,T>) this operator can be used to transform an error signal to a different one *without* logging it as an error in the process. So in that sense it is NOT exactly equivalent to recover(t => throw t2) since recover would log the t2 error.

        Since the underlying failure signal onError arrives out-of-band, it might jump over existing elements. This operator can recover the failure signal, but not the skipped elements, which will be dropped.

        Similarly to <T>recover(scala.PartialFunction<java.lang.Throwable,T>) throwing an exception inside mapError _will_ be logged.

        '''Emits when''' element is available from the upstream or upstream is failed and pf returns an element

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes or upstream failed with exception pf can handle

        '''Cancels when''' downstream cancels

      • merge

        <U,​M> FlowOps merge​(Graph<SourceShape<U>,​M> that,
                                  boolean eagerComplete)
        Merge the given Source to this Flow, taking elements as they arrive from input streams, picking randomly when several elements ready.

        '''Emits when''' one of the inputs has an element available

        '''Backpressures when''' downstream backpressures

        '''Completes when''' all upstreams complete (eagerComplete=false) or one upstream completes (eagerComplete=true), default value is false

        '''Cancels when''' downstream cancels

      • merge$default$2

        <U,​M> boolean merge$default$2()
      • mergeAll

        <U> FlowOps mergeAll​(scala.collection.immutable.Seq<Graph<SourceShape<U>,​?>> those,
                             boolean eagerComplete)
        Merge the given Sources to this Flow, taking elements as they arrive from input streams, picking randomly when several elements ready.

        '''Emits when''' one of the inputs has an element available

        '''Backpressures when''' downstream backpressures

        '''Completes when''' all upstreams complete (eagerComplete=false) or one upstream completes (eagerComplete=true), default value is false

        '''Cancels when''' downstream cancels

      • mergeLatest

        <U,​M> FlowOps mergeLatest​(Graph<SourceShape<U>,​M> that,
                                        boolean eagerComplete)
        MergeLatest joins elements from N input streams into stream of lists of size N. i-th element in list is the latest emitted element from i-th input stream. MergeLatest emits list for each element emitted from some input stream, but only after each input stream emitted at least one element.

        '''Emits when''' an element is available from some input and each input emits at least one element from stream start

        '''Completes when''' all upstreams complete (eagerClose=false) or one upstream completes (eagerClose=true)

      • mergeLatest$default$2

        <U,​M> boolean mergeLatest$default$2()
      • mergeLatestGraph

        <U,​M> Graph<FlowShape<Out,​scala.collection.immutable.Seq<U>>,​M> mergeLatestGraph​(Graph<SourceShape<U>,​M> that,
                                                                                                           boolean eagerComplete)
      • mergePreferred

        <U,​M> FlowOps mergePreferred​(Graph<SourceShape<U>,​M> that,
                                           boolean preferred,
                                           boolean eagerComplete)
        Merge two sources. Prefer one source if both sources have elements ready.

        '''emits''' when one of the inputs has an element available. If multiple have elements available, prefer the 'right' one when 'preferred' is 'true', or the 'left' one when 'preferred' is 'false'.

        '''backpressures''' when downstream backpressures

        '''completes''' when all upstreams complete (This behavior is changeable to completing when any upstream completes by setting eagerComplete=true.)

      • mergePreferred$default$3

        <U,​M> boolean mergePreferred$default$3()
      • mergePreferredGraph

        <U,​M> Graph<FlowShape<Out,​U>,​M> mergePreferredGraph​(Graph<SourceShape<U>,​M> that,
                                                                              boolean preferred,
                                                                              boolean eagerComplete)
      • mergePrioritized

        <U,​M> FlowOps mergePrioritized​(Graph<SourceShape<U>,​M> that,
                                             int leftPriority,
                                             int rightPriority,
                                             boolean eagerComplete)
        Merge two sources. Prefer the sources depending on the 'priority' parameters.

        '''emits''' when one of the inputs has an element available, preferring inputs based on the 'priority' parameters if both have elements available

        '''backpressures''' when downstream backpressures

        '''completes''' when both upstreams complete (This behavior is changeable to completing when any upstream completes by setting eagerComplete=true.)

      • mergePrioritized$default$4

        <U,​M> boolean mergePrioritized$default$4()
      • mergePrioritizedGraph

        <U,​M> Graph<FlowShape<Out,​U>,​M> mergePrioritizedGraph​(Graph<SourceShape<U>,​M> that,
                                                                                int leftPriority,
                                                                                int rightPriority,
                                                                                boolean eagerComplete)
      • mergeSorted

        <U,​M> FlowOps mergeSorted​(Graph<SourceShape<U>,​M> that,
                                        scala.math.Ordering<U> ord)
        Merge the given Source to this Flow, taking elements as they arrive from input streams, picking always the smallest of the available elements (waiting for one element from each side to be available). This means that possible contiguity of the input streams is not exploited to avoid waiting for elements, this merge will block when one of the inputs does not have more elements (and does not complete).

        '''Emits when''' all of the inputs have an element available

        '''Backpressures when''' downstream backpressures

        '''Completes when''' all upstreams complete

        '''Cancels when''' downstream cancels

      • named

        FlowOps named​(java.lang.String name)
      • orElse

        <U,​Mat2> FlowOps orElse​(Graph<SourceShape<U>,​Mat2> secondary)
        Provides a secondary source that will be consumed if this stream completes without any elements passing by. As soon as the first element comes through this stream, the alternative will be cancelled.

        Note that this Flow will be materialized together with the Source and just kept from producing elements by asserting back-pressure until its time comes or it gets cancelled.

        On errors the operator is failed regardless of source of the error.

        '''Emits when''' element is available from first stream or first stream closed without emitting any elements and an element is available from the second stream

        '''Backpressures when''' downstream backpressures

        '''Completes when''' the primary stream completes after emitting at least one element, when the primary stream completes without emitting and the secondary stream already has completed or when the secondary stream completes

        '''Cancels when''' downstream cancels and additionally the alternative is cancelled as soon as an element passes by from this stream.

      • prefixAndTail

        <U> FlowOps prefixAndTail​(int n)
        Takes up to n elements from the stream (less than n only if the upstream completes before emitting n elements) and returns a pair containing a strict sequence of the taken element and a stream representing the remaining elements. If ''n'' is zero or negative, then this will return a pair of an empty collection and a stream containing the whole upstream unchanged.

        In case of an upstream error, depending on the current state - the master stream signals the error if less than n elements has been seen, and therefore the substream has not yet been emitted - the tail substream signals the error after the prefix and tail has been emitted by the main stream (at that point the main stream has already completed)

        '''Emits when''' the configured number of prefix elements are available. Emits this prefix, and the rest as a substream

        '''Backpressures when''' downstream backpressures or substream backpressures

        '''Completes when''' prefix elements have been consumed and substream has been consumed

        '''Cancels when''' downstream cancels or substream cancels

      • prepend

        <U,​Mat2> FlowOps prepend​(Graph<SourceShape<U>,​Mat2> that)
        Prepend the given Source to this Flow, meaning that before elements are generated from this Flow, the Source's elements will be produced until it is exhausted, at which point Flow elements will start being produced.

        Note that the Source is materialized together with this Flow and is "detached" meaning in effect behave as a one element buffer in front of both the sources, that eagerly demands an element on start (so it can not be combined with Source.lazy to defer materialization of that).

        This flow will then be kept from producing elements by asserting back-pressure until its time comes.

        When needing a prepend operator that is not detached use prependLazy(org.apache.pekko.stream.Graph<org.apache.pekko.stream.SourceShape<U>, Mat2>)

        '''Emits when''' element is available from the given Source or from current stream when the Source is completed

        '''Backpressures when''' downstream backpressures

        '''Completes when''' this Flow completes

        '''Cancels when''' downstream cancels

      • prependLazy

        <U,​Mat2> FlowOps prependLazy​(Graph<SourceShape<U>,​Mat2> that)
        Prepend the given Source to this Flow, meaning that before elements are generated from this Flow, the Source's elements will be produced until it is exhausted, at which point Flow elements will start being produced.

        Note that the Source is materialized together with this Flow and will then be kept from producing elements by asserting back-pressure until its time comes.

        When needing a prepend operator that is also detached use prepend(org.apache.pekko.stream.Graph<org.apache.pekko.stream.SourceShape<U>, Mat2>)

        If the given Source gets upstream error - no elements from this Flow will be pulled.

        '''Emits when''' element is available from the given Source or from current stream when the Source is completed

        '''Backpressures when''' downstream backpressures

        '''Completes when''' this Flow completes

        '''Cancels when''' downstream cancels

      • recover

        <T> FlowOps recover​(scala.PartialFunction<java.lang.Throwable,​T> pf)
        Recover allows to send last element on failure and gracefully complete the stream Since the underlying failure signal onError arrives out-of-band, it might jump over existing elements. This operator can recover the failure signal, but not the skipped elements, which will be dropped.

        Throwing an exception inside recover _will_ be logged on ERROR level automatically.

        '''Emits when''' element is available from the upstream or upstream is failed and pf returns an element

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes or upstream failed with exception pf can handle

        '''Cancels when''' downstream cancels

      • recoverWith

        <T> FlowOps recoverWith​(scala.PartialFunction<java.lang.Throwable,​Graph<SourceShape<T>,​NotUsed>> pf)
        RecoverWith allows to switch to alternative Source on flow failure. It will stay in effect after a failure has been recovered so that each time there is a failure it is fed into the pf and a new Source may be materialized.

        Since the underlying failure signal onError arrives out-of-band, it might jump over existing elements. This operator can recover the failure signal, but not the skipped elements, which will be dropped.

        Throwing an exception inside recoverWith _will_ be logged on ERROR level automatically.

        '''Emits when''' element is available from the upstream or upstream is failed and element is available from alternative Source

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes or upstream failed with exception pf can handle

        '''Cancels when''' downstream cancels

      • recoverWithRetries

        <T> FlowOps recoverWithRetries​(int attempts,
                                       scala.PartialFunction<java.lang.Throwable,​Graph<SourceShape<T>,​NotUsed>> pf)
        RecoverWithRetries allows to switch to alternative Source on flow failure. It will stay in effect after a failure has been recovered up to attempts number of times so that each time there is a failure it is fed into the pf and a new Source may be materialized. Note that if you pass in 0, this won't attempt to recover at all.

        A negative attempts number is interpreted as "infinite", which results in the exact same behavior as recoverWith.

        Since the underlying failure signal onError arrives out-of-band, it might jump over existing elements. This operator can recover the failure signal, but not the skipped elements, which will be dropped.

        Throwing an exception inside recoverWithRetries _will_ be logged on ERROR level automatically.

        '''Emits when''' element is available from the upstream or upstream is failed and element is available from alternative Source

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes or upstream failed with exception pf can handle

        '''Cancels when''' downstream cancels

        Parameters:
        attempts - Maximum number of retries or -1 to retry indefinitely
        pf - Receives the failure cause and returns the new Source to be materialized if any
      • reduce

        <T> FlowOps reduce​(scala.Function2<T,​T,​T> f)
        Similar to fold but uses first element as zero element. Applies the given function towards its current and next value, yielding the next current value.

        If the stream is empty (i.e. completes before signalling any elements), the reduce operator will fail its downstream with a NoSuchElementException, which is semantically in-line with that Scala's standard library collections do in such situations.

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        '''Emits when''' upstream completes

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

        See also FlowOps.fold

      • scan

        <T> FlowOps scan​(T zero,
                         scala.Function2<T,​Out,​T> f)
        Similar to fold but is not a terminal operation, emits its current value which starts at zero and then applies the current and next value to the given function f, emitting the next current value.

        If the function f throws an exception and the supervision decision is pekko.stream.Supervision.Restart current value starts at zero again the stream will continue.

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        Note that the zero value must be immutable.

        '''Emits when''' the function scanning the element returns a new element

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

        See also FlowOps.scanAsync

      • scanAsync

        <T> FlowOps scanAsync​(T zero,
                              scala.Function2<T,​Out,​scala.concurrent.Future<T>> f)
        Similar to scan but with an asynchronous function, emits its current value which starts at zero and then applies the current and next value to the given function f, emitting a Future that resolves to the next current value.

        If the function f throws an exception and the supervision decision is pekko.stream.Supervision.Restart current value starts at zero again the stream will continue.

        If the function f throws an exception and the supervision decision is pekko.stream.Supervision.Resume current value starts at the previous current value, or zero when it doesn't have one, and the stream will continue.

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        Note that the zero value must be immutable.

        '''Emits when''' the future returned by f completes

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes and the last future returned by f completes

        '''Cancels when''' downstream cancels

        See also FlowOps.scan

      • sliding

        FlowOps sliding​(int n,
                        int step)
        Apply a sliding window over the stream and return the windows as groups of elements, with the last group possibly smaller than requested due to end-of-stream.

        n must be positive, otherwise IllegalArgumentException is thrown. step must be positive, otherwise IllegalArgumentException is thrown.

        '''Emits when''' enough elements have been collected within the window or upstream completed

        '''Backpressures when''' a window has been assembled and downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

      • sliding$default$2

        int sliding$default$2()
      • splitAfter

        SubFlow<Out,​Mat,​FlowOps,​java.lang.Object> splitAfter​(SubstreamCancelStrategy substreamCancelStrategy,
                                                                               scala.Function1<Out,​java.lang.Object> p)
        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
         

        The object returned from this method is not a normal Source or Flow, it is a SubFlow. This means that after this operator all transformations are applied to all encountered substreams in the same fashion. Substream mode is exited either by closing the substream (i.e. connecting it to a Sink) or by merging the substreams back together; see the to and mergeBack methods on SubFlow for more information.

        It is important to note that the substreams also propagate back-pressure as any other stream, which means that blocking one substream will block the splitAfter operator itself—and thereby all substreams—once all internal or explicit buffers are filled.

        If the split predicate p throws an exception and the supervision decision is pekko.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 pekko.stream.Supervision.Resume or pekko.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 emits 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 on SubstreamCancelStrategy.drain, downstream cancels or any substream cancels on SubstreamCancelStrategy.propagate

        See also FlowOps.splitWhen.

      • splitWhen

        SubFlow<Out,​Mat,​FlowOps,​java.lang.Object> splitWhen​(SubstreamCancelStrategy substreamCancelStrategy,
                                                                              scala.Function1<Out,​java.lang.Object> p)
        This operation applies the given predicate to all incoming elements and emits them to a stream of output streams, always beginning a new one with the current element if the given predicate returns true for it. This means that for the following series of predicate values, three substreams will be produced with lengths 1, 2, and 3:

        
         false,             // element goes into first substream
         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
         

        The object returned from this method is not a normal Source or Flow, it is a SubFlow. This means that after this operator all transformations are applied to all encountered substreams in the same fashion. Substream mode is exited either by closing the substream (i.e. connecting it to a Sink) or by merging the substreams back together; see the to and mergeBack methods on SubFlow for more information.

        It is important to note that the substreams also propagate back-pressure as any other stream, which means that blocking one substream will block the splitWhen operator itself—and thereby all substreams—once all internal or explicit buffers are filled.

        If the split predicate p throws an exception and the supervision decision is pekko.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 pekko.stream.Supervision.Resume or pekko.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 on SubstreamCancelStrategy.drain, downstream cancels or any substream cancels on SubstreamCancelStrategy.propagate

        See also FlowOps.splitAfter.

      • statefulMap

        <S,​T> FlowOps statefulMap​(scala.Function0<S> create,
                                        scala.Function2<S,​Out,​scala.Tuple2<S,​T>> f,
                                        scala.Function1<S,​scala.Option<T>> onComplete)
        Transform each stream element with the help of a state.

        The state creation function is invoked once when the stream is materialized and the returned state is passed to the mapping function for mapping the first element. The mapping function returns a mapped element to emit downstream and a state to pass to the next mapping function. The state can be the same for each mapping return, be a new immutable state but it is also safe to use a mutable state. The returned T MUST NOT be null as it is illegal as stream element - according to the Reactive Streams specification.

        For stateless variant see FlowOps.map.

        The onComplete function is called only once when the upstream or downstream finished, You can do some clean-up here, and if the returned value is not empty, it will be emitted to the downstream if available, otherwise the value will be dropped.

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        '''Emits when''' the mapping function returns an element and downstream is ready to consume it

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

        Parameters:
        create - a function that creates the initial state
        f - a function that transforms the upstream element and the state into a pair of next state and output element
        onComplete - a function that transforms the ongoing state into an optional output element
      • statefulMapConcat

        <T> FlowOps statefulMapConcat​(scala.Function0<scala.Function1<Out,​scala.collection.IterableOnce<T>>> f)
        Transform each input element into an Iterable of output elements that is then flattened into the output stream. The transformation is meant to be stateful, which is enabled by creating the transformation function anew for every materialization — the returned function will typically close over mutable objects to store state between invocations. For the stateless variant see FlowOps.mapConcat.

        The returned Iterable MUST NOT contain null values, as they are illegal as stream elements - according to the Reactive Streams specification.

        This operator doesn't handle upstream's completion signal since the state kept in the closure can be lost. Use FlowOps.statefulMap instead.

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        '''Emits when''' the mapping function returns an element or there are still remaining elements from the previously calculated collection

        '''Backpressures when''' downstream backpressures or there are still remaining elements from the previously calculated collection

        '''Completes when''' upstream completes and all remaining elements has been emitted

        '''Cancels when''' downstream cancels

        See also FlowOps.mapConcat

      • take

        FlowOps take​(long n)
        Terminate processing (and cancel the upstream publisher) after the given number of elements. Due to input buffering some elements may have been requested from upstream publishers that will then not be processed downstream of this step.

        The stream will be completed without producing any elements if n is zero or negative.

        '''Emits when''' the specified number of elements to take has not yet been reached

        '''Backpressures when''' downstream backpressures

        '''Completes when''' the defined number of elements has been taken or upstream completes

        '''Cancels when''' the defined number of elements has been taken or downstream cancels

        See also FlowOps.limit, FlowOps.limitWeighted

      • takeWhile

        FlowOps takeWhile​(scala.Function1<Out,​java.lang.Object> p)
        Terminate processing (and cancel the upstream publisher) after predicate returns false for the first time, Due to input buffering some elements may have been requested from upstream publishers that will then not be processed downstream of this step.

        The stream will be completed without producing any elements if predicate is false for the first stream element.

        '''Emits when''' the predicate is true

        '''Backpressures when''' downstream backpressures

        '''Completes when''' predicate returned false (or 1 after predicate returns false if inclusive or upstream completes

        '''Cancels when''' predicate returned false or downstream cancels

        See also FlowOps.limit, FlowOps.limitWeighted

      • takeWhile

        FlowOps takeWhile​(scala.Function1<Out,​java.lang.Object> p,
                          boolean inclusive)
        Terminate processing (and cancel the upstream publisher) after predicate returns false for the first time, including the first failed element iff inclusive is true Due to input buffering some elements may have been requested from upstream publishers that will then not be processed downstream of this step.

        The stream will be completed without producing any elements if predicate is false for the first stream element.

        Adheres to the ActorAttributes.SupervisionStrategy attribute.

        '''Emits when''' the predicate is true

        '''Backpressures when''' downstream backpressures

        '''Completes when''' predicate returned false (or 1 after predicate returns false if inclusive or upstream completes

        '''Cancels when''' predicate returned false or downstream cancels

        See also FlowOps.limit, FlowOps.limitWeighted

      • takeWithin

        FlowOps takeWithin​(scala.concurrent.duration.FiniteDuration d)
        Terminate processing (and cancel the upstream publisher) after the given duration. Due to input buffering some elements may have been requested from upstream publishers that will then not be processed downstream of this step.

        Note that this can be combined with take(long) to limit the number of elements within the duration.

        '''Emits when''' an upstream element arrives

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes or timer fires

        '''Cancels when''' downstream cancels or timer fires

      • throttle

        FlowOps throttle​(int elements,
                         scala.concurrent.duration.FiniteDuration per)
        Sends elements downstream with speed limited to elements/per. In other words, this operator set the maximum rate for emitting messages. This operator works for streams where all elements have the same cost or length.

        Throttle implements the token bucket model. There is a bucket with a given token capacity (burst size). Tokens drops into the bucket at a given rate and can be spared for later use up to bucket capacity to allow some burstiness. Whenever stream wants to send an element, it takes as many tokens from the bucket as element costs. If there isn't any, throttle waits until the bucket accumulates enough tokens. Elements that costs more than the allowed burst will be delayed proportionally to their cost minus available tokens, meeting the target rate. Bucket is full when stream just materialized and started.

        The burst size is calculated based on the given rate (cost/per) as 0.1 * rate, for example: - rate < 20/second => burst size 1 - rate 20/second => burst size 2 - rate 100/second => burst size 10 - rate 200/second => burst size 20

        The throttle mode is pekko.stream.ThrottleMode.Shaping, which makes pauses before emitting messages to meet throttle rate.

        '''Emits when''' upstream emits an element and configured time per each element elapsed

        '''Backpressures when''' downstream backpressures or the incoming rate is higher than the speed limit

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

      • throttle

        FlowOps throttle​(int elements,
                         scala.concurrent.duration.FiniteDuration per,
                         int maximumBurst,
                         ThrottleMode mode)
        Sends elements downstream with speed limited to elements/per. In other words, this operator set the maximum rate for emitting messages. This operator works for streams where all elements have the same cost or length.

        Throttle implements the token bucket model. There is a bucket with a given token capacity (burst size or maximumBurst). Tokens drops into the bucket at a given rate and can be spared for later use up to bucket capacity to allow some burstiness. Whenever stream wants to send an element, it takes as many tokens from the bucket as element costs. If there isn't any, throttle waits until the bucket accumulates enough tokens. Elements that costs more than the allowed burst will be delayed proportionally to their cost minus available tokens, meeting the target rate. Bucket is full when stream just materialized and started.

        Parameter mode manages behavior when upstream is faster than throttle rate: - pekko.stream.ThrottleMode.Shaping makes pauses before emitting messages to meet throttle rate - pekko.stream.ThrottleMode.Enforcing fails with exception when upstream is faster than throttle rate. Enforcing cannot emit elements that cost more than the maximumBurst

        It is recommended to use non-zero burst sizes as they improve both performance and throttling precision by allowing the implementation to avoid using the scheduler when input rates fall below the enforced limit and to reduce most of the inaccuracy caused by the scheduler resolution (which is in the range of milliseconds).

        WARNING: Be aware that throttle is using scheduler to slow down the stream. This scheduler has minimal time of triggering next push. Consequently it will slow down the stream as it has minimal pause for emitting. This can happen in case burst is 0 and speed is higher than 30 events per second. You need to increase the maximumBurst if elements arrive with small interval (30 milliseconds or less). Use the overloaded throttle method without maximumBurst parameter to automatically calculate the maximumBurst based on the given rate (cost/per). In other words the throttler always enforces the rate limit when maximumBurst parameter is given, but in certain cases (mostly due to limited scheduler resolution) it enforces a tighter bound than what was prescribed.

        '''Emits when''' upstream emits an element and configured time per each element elapsed

        '''Backpressures when''' downstream backpressures or the incoming rate is higher than the speed limit

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

      • throttle

        FlowOps throttle​(int cost,
                         scala.concurrent.duration.FiniteDuration per,
                         scala.Function1<Out,​java.lang.Object> costCalculation)
        Sends elements downstream with speed limited to cost/per. Cost is calculating for each element individually by calling calculateCost function. This operator works for streams when elements have different cost(length). Streams of ByteString for example.

        Throttle implements the token bucket model. There is a bucket with a given token capacity (burst size). Tokens drops into the bucket at a given rate and can be spared for later use up to bucket capacity to allow some burstiness. Whenever stream wants to send an element, it takes as many tokens from the bucket as element costs. If there isn't any, throttle waits until the bucket accumulates enough tokens. Elements that costs more than the allowed burst will be delayed proportionally to their cost minus available tokens, meeting the target rate. Bucket is full when stream just materialized and started.

        The burst size is calculated based on the given rate (cost/per) as 0.1 * rate, for example: - rate < 20/second => burst size 1 - rate 20/second => burst size 2 - rate 100/second => burst size 10 - rate 200/second => burst size 20

        The throttle mode is pekko.stream.ThrottleMode.Shaping, which makes pauses before emitting messages to meet throttle rate.

        '''Emits when''' upstream emits an element and configured time per each element elapsed

        '''Backpressures when''' downstream backpressures or the incoming rate is higher than the speed limit

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

      • throttle

        FlowOps throttle​(int cost,
                         scala.concurrent.duration.FiniteDuration per,
                         int maximumBurst,
                         scala.Function1<Out,​java.lang.Object> costCalculation,
                         ThrottleMode mode)
        Sends elements downstream with speed limited to cost/per. Cost is calculating for each element individually by calling calculateCost function. This operator works for streams when elements have different cost(length). Streams of ByteString for example.

        Throttle implements the token bucket model. There is a bucket with a given token capacity (burst size or maximumBurst). Tokens drops into the bucket at a given rate and can be spared for later use up to bucket capacity to allow some burstiness. Whenever stream wants to send an element, it takes as many tokens from the bucket as element costs. If there isn't any, throttle waits until the bucket accumulates enough tokens. Elements that costs more than the allowed burst will be delayed proportionally to their cost minus available tokens, meeting the target rate. Bucket is full when stream just materialized and started.

        Parameter mode manages behavior when upstream is faster than throttle rate: - pekko.stream.ThrottleMode.Shaping makes pauses before emitting messages to meet throttle rate - pekko.stream.ThrottleMode.Enforcing fails with exception when upstream is faster than throttle rate. Enforcing cannot emit elements that cost more than the maximumBurst

        It is recommended to use non-zero burst sizes as they improve both performance and throttling precision by allowing the implementation to avoid using the scheduler when input rates fall below the enforced limit and to reduce most of the inaccuracy caused by the scheduler resolution (which is in the range of milliseconds).

        WARNING: Be aware that throttle is using scheduler to slow down the stream. This scheduler has minimal time of triggering next push. Consequently it will slow down the stream as it has minimal pause for emitting. This can happen in case burst is 0 and speed is higher than 30 events per second. You need to increase the maximumBurst if elements arrive with small interval (30 milliseconds or less). Use the overloaded throttle method without maximumBurst parameter to automatically calculate the maximumBurst based on the given rate (cost/per). In other words the throttler always enforces the rate limit when maximumBurst parameter is given, but in certain cases (mostly due to limited scheduler resolution) it enforces a tighter bound than what was prescribed.

        '''Emits when''' upstream emits an element and configured time per each element elapsed

        '''Backpressures when''' downstream backpressures or the incoming rate is higher than the speed limit

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

      • throttleEven

        FlowOps throttleEven​(int elements,
                             scala.concurrent.duration.FiniteDuration per,
                             ThrottleMode mode)
        Deprecated.
        Use throttle without `maximumBurst` parameter instead. Since Akka 2.5.12.
        This is a simplified version of throttle that spreads events evenly across the given time interval. throttleEven using best effort approach to meet throttle rate.

        Use this operator when you need just slow down a stream without worrying about exact amount of time between events.

        If you want to be sure that no time interval has no more than specified number of events you need to use throttle(int,scala.concurrent.duration.FiniteDuration) with maximumBurst attribute.

        See Also:
        throttle(int,scala.concurrent.duration.FiniteDuration)
      • throttleEven

        FlowOps throttleEven​(int cost,
                             scala.concurrent.duration.FiniteDuration per,
                             scala.Function1<Out,​java.lang.Object> costCalculation,
                             ThrottleMode mode)
        Deprecated.
        Use throttle without `maximumBurst` parameter instead. Since Akka 2.5.12.
        This is a simplified version of throttle that spreads events evenly across the given time interval.

        Use this operator when you need just slow down a stream without worrying about exact amount of time between events.

        If you want to be sure that no time interval has no more than specified number of events you need to use throttle(int,scala.concurrent.duration.FiniteDuration) with maximumBurst attribute.

        See Also:
        throttle(int,scala.concurrent.duration.FiniteDuration)
      • to

        <Mat2> java.lang.Object to​(Graph<SinkShape<Out>,​Mat2> sink)
        Connect this Flow to a Sink, concatenating the processing steps of both.
        
             +------------------------------+
             | Resulting Sink[In, Mat]      |
             |                              |
             |  +------+          +------+  |
             |  |      |          |      |  |
         In ~~> | flow | ~~Out~~> | sink |  |
             |  |   Mat|          |     M|  |
             |  +------+          +------+  |
             +------------------------------+
         

        The materialized value of the combined Sink will be the materialized value of the current flow (ignoring the given Sink&rsquo;s value), use {@link Flow#toMat[Mat2* toMat} if a different strategy is needed.

        See also FlowOpsMat.toMat when access to materialized values of the parameter is needed.

      • watch

        FlowOps watch​(ActorRef ref)
        The operator fails with an pekko.stream.WatchedActorTerminatedException if the target actor is terminated.

        '''Emits when''' upstream emits

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes

        '''Fails when''' the watched actor terminates

        '''Cancels when''' downstream cancels

      • wireTap

        FlowOps wireTap​(scala.Function1<Out,​scala.runtime.BoxedUnit> f)
        This is a simplified version of wireTap(Sink) that takes only a simple function. Elements will be passed into this "side channel" function, and any of its results will be ignored.

        If the wire-tap operation is slow (it backpressures), elements that would've been sent to it will be dropped instead. It is similar to alsoTo(org.apache.pekko.stream.Graph<org.apache.pekko.stream.SinkShape<Out>, ?>) which does backpressure instead of dropping elements.

        This operation is useful for inspecting the passed through element, usually by means of side-effecting operations (such as println, or emitting metrics), for each element without having to modify it.

        For logging signals (elements, completion, error) consider using the log(java.lang.String,scala.Function1<Out,java.lang.Object>,org.apache.pekko.event.LoggingAdapter) operator instead, along with appropriate ActorAttributes.logLevels.

        '''Emits when''' upstream emits an element; the same element will be passed to the attached function, as well as to the downstream operator

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

      • wireTap

        FlowOps wireTap​(Graph<SinkShape<Out>,​?> that)
        Attaches the given Sink to this Flow as a wire tap, meaning that elements that pass through will also be sent to the wire-tap Sink, without the latter affecting the mainline flow. If the wire-tap Sink backpressures, elements that would've been sent to it will be dropped instead.

        It is similar to alsoTo(org.apache.pekko.stream.Graph<org.apache.pekko.stream.SinkShape<Out>, ?>) which does backpressure instead of dropping elements.

        '''Emits when''' element is available and demand exists from the downstream; the element will also be sent to the wire-tap Sink if there is demand.

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels

      • zip

        <U> FlowOps zip​(Graph<SourceShape<U>,​?> that)
        Combine the elements of current flow and the given Source into a stream of tuples.

        '''Emits when''' all of the inputs have an element available

        '''Backpressures when''' downstream backpressures

        '''Completes when''' any upstream completes

        '''Cancels when''' downstream cancels

      • zipAll

        <U,​A> FlowOps zipAll​(Graph<SourceShape<U>,​?> that,
                                   A thisElem,
                                   U thatElem)
        Combine the elements of current flow and the given Source into a stream of tuples.

        '''Emits when''' at first emits when both inputs emit, and then as long as any input emits (coupled to the default value of the completed input).

        '''Backpressures when''' downstream backpressures

        '''Completes when''' all upstream completes

        '''Cancels when''' downstream cancels

      • zipAllFlow

        <U,​A,​Mat2> Flow<Out,​scala.Tuple2<A,​U>,​Mat2> zipAllFlow​(Graph<SourceShape<U>,​Mat2> that,
                                                                                             A thisElem,
                                                                                             U thatElem)
      • zipLatest

        <U> FlowOps zipLatest​(Graph<SourceShape<U>,​?> that)
        Combine the elements of 2 streams into a stream of tuples, picking always the latest element of each.

        A ZipLatest has a left and a right input port and one out port.

        No element is emitted until at least one element from each Source becomes available.

        '''Emits when''' all of the inputs have at least an element available, and then each time an element becomes available on either of the inputs

        '''Backpressures when''' downstream backpressures

        '''Completes when''' any upstream completes

        '''Cancels when''' downstream cancels

      • zipLatestWith

        <Out2,​Out3> FlowOps zipLatestWith​(Graph<SourceShape<Out2>,​?> that,
                                                scala.Function2<Out,​Out2,​Out3> combine)
        Combine the elements of multiple streams into a stream of combined elements using a combiner function, picking always the latest of the elements of each source.

        No element is emitted until at least one element from each Source becomes available. Whenever a new element appears, the zipping function is invoked with a tuple containing the new element and the other last seen elements.

        '''Emits when''' all of the inputs have at least an element available, and then each time an element becomes available on either of the inputs

        '''Backpressures when''' downstream backpressures

        '''Completes when''' any of the upstreams completes

        '''Cancels when''' downstream cancels

      • zipLatestWith

        <Out2,​Out3> FlowOps zipLatestWith​(Graph<SourceShape<Out2>,​?> that,
                                                boolean eagerComplete,
                                                scala.Function2<Out,​Out2,​Out3> combine)
        Combine the elements of multiple streams into a stream of combined elements using a combiner function, picking always the latest of the elements of each source.

        No element is emitted until at least one element from each Source becomes available. Whenever a new element appears, the zipping function is invoked with a tuple containing the new element and the other last seen elements.

        '''Emits when''' all of the inputs have at least an element available, and then each time an element becomes available on either of the inputs

        '''Backpressures when''' downstream backpressures

        '''Completes when''' any upstream completes if eagerComplete is enabled or wait for all upstreams to complete

        '''Cancels when''' downstream cancels

      • zipLatestWithGraph

        <Out2,​Out3,​M> Graph<FlowShape<Out,​Out3>,​M> zipLatestWithGraph​(Graph<SourceShape<Out2>,​M> that,
                                                                                              scala.Function2<Out,​Out2,​Out3> combine)
      • zipLatestWithGraph

        <Out2,​Out3,​M> Graph<FlowShape<Out,​Out3>,​M> zipLatestWithGraph​(Graph<SourceShape<Out2>,​M> that,
                                                                                              boolean eagerComplete,
                                                                                              scala.Function2<Out,​Out2,​Out3> combine)
      • zipWith

        <Out2,​Out3> FlowOps zipWith​(Graph<SourceShape<Out2>,​?> that,
                                          scala.Function2<Out,​Out2,​Out3> combine)
        Put together the elements of current flow and the given Source into a stream of combined elements using a combiner function.

        '''Emits when''' all of the inputs have an element available

        '''Backpressures when''' downstream backpressures

        '''Completes when''' any upstream completes

        '''Cancels when''' downstream cancels

      • zipWithIndex

        FlowOps zipWithIndex()
        Combine the elements of current flow into a stream of tuples consisting of all elements paired with their index. Indices start at 0.

        '''Emits when''' upstream emits an element and is paired with their index

        '''Backpressures when''' downstream backpressures

        '''Completes when''' upstream completes

        '''Cancels when''' downstream cancels