Flow

org.apache.pekko.stream.javadsl.Flow
See theFlow companion class
object Flow

Attributes

Companion
class
Source
Flow.scala
Graph
Supertypes
class Object
trait Matchable
class Any
Self type
Flow.type

Members list

Value members

Concrete methods

def completionStageFlow[I, O, M](flow: CompletionStage[Flow[I, O, M]]): Flow[I, O, CompletionStage[M]]

Turn a CompletionStage<Flow> into a flow that will consume the values of the source when the future completes successfully. If the Future is completed with a failure the stream is failed.

Turn a CompletionStage<Flow> into a flow that will consume the values of the source when the future completes successfully. If the Future is completed with a failure the stream is failed.

The materialized completion stage value is completed with the materialized value of the future flow or failed with a NeverMaterializedException if upstream fails or downstream cancels before the completion stage has completed.

Attributes

Source
Flow.scala
def create[T](): Flow[T, T, NotUsed]

Create a Flow which can process elements of type T.

Create a Flow which can process elements of type T.

Attributes

Source
Flow.scala
def flattenOptional[Out, In <: Optional[Out]](): Flow[In, Out, NotUsed]

Collect the value of Optional from the elements passing through this flow, empty Optional is filtered out.

Collect the value of Optional from the elements passing through this flow, empty Optional is filtered out.

Adheres to the ActorAttributes.SupervisionStrategy attribute.

'''Emits when''' the current Optional's value is present.

'''Backpressures when''' the value of the current Optional is present and downstream backpressures

'''Completes when''' upstream completes

'''Cancels when''' downstream cancels *

Attributes

Source
Flow.scala
def fromFunction[I, O](f: Function[I, O]): Flow[I, O, NotUsed]

Creates a [Flow] which will use the given function to transform its inputs to outputs. It is equivalent to Flow.create[T].map(f)

Creates a [Flow] which will use the given function to transform its inputs to outputs. It is equivalent to Flow.create[T].map(f)

Attributes

Source
Flow.scala
def fromGraph[I, O, M](g: Graph[FlowShape[I, O], M]): Flow[I, O, M]

A graph with the shape of a flow logically is a flow, this method makes it so also in type.

A graph with the shape of a flow logically is a flow, this method makes it so also in type.

Attributes

Source
Flow.scala
def fromMaterializer[I, O, M](factory: BiFunction[Materializer, Attributes, Flow[I, O, M]]): Flow[I, O, CompletionStage[M]]

Defers the creation of a Flow until materialization. The factory function exposes Materializer which is going to be used during materialization and Attributes of the Flow returned by this method.

Defers the creation of a Flow until materialization. The factory function exposes Materializer which is going to be used during materialization and Attributes of the Flow returned by this method.

Attributes

Source
Flow.scala
def fromProcessor[I, O](processorFactory: Creator[Processor[I, O]]): Flow[I, O, NotUsed]

Attributes

Source
Flow.scala
def fromProcessorMat[I, O, Mat](processorFactory: Creator[Pair[Processor[I, O], Mat]]): Flow[I, O, Mat]

Attributes

Source
Flow.scala
def fromSinkAndSource[I, O](sink: Graph[SinkShape[I], _], source: Graph[SourceShape[O], _]): Flow[I, O, NotUsed]

Creates a Flow from a Sink and a Source where the Flow's input will be sent to the Sink and the Flow's output will come from the Source.

Creates a Flow from a Sink and a Source where the Flow's input will be sent to the Sink and the Flow's output will come from the Source.

The resulting flow can be visualized as:

   +----------------------------------------------+
   | Resulting Flow[I, O, NotUsed]                |
   |                                              |
   |  +---------+                  +-----------+  |
   |  |         |                  |           |  |
I  ~~> | Sink[I] | [no-connection!] | Source[O] | ~~> O
   |  |         |                  |           |  |
   |  +---------+                  +-----------+  |
   +----------------------------------------------+

The completion of the Sink and Source sides of a Flow constructed using this method are independent. So if the Sink receives a completion signal, the Source side will remain unaware of that. If you are looking to couple the termination signals of the two sides use Flow.fromSinkAndSourceCoupled instead.

See also fromSinkAndSourceMat when access to materialized values of the parameters is needed.

Attributes

Source
Flow.scala
def fromSinkAndSourceCoupled[I, O](sink: Graph[SinkShape[I], _], source: Graph[SourceShape[O], _]): Flow[I, O, NotUsed]

Allows coupling termination (cancellation, completion, erroring) of Sinks and Sources while creating a Flow from them. Similar to Flow.fromSinkAndSource however couples the termination of these two operators.

Allows coupling termination (cancellation, completion, erroring) of Sinks and Sources while creating a Flow from them. Similar to Flow.fromSinkAndSource however couples the termination of these two operators.

The resulting flow can be visualized as:

   +---------------------------------------------+
   | Resulting Flow[I, O, NotUsed]               |
   |                                             |
   |  +---------+                 +-----------+  |
   |  |         |                 |           |  |
I  ~~> | Sink[I] | ~~~(coupled)~~~ | Source[O] | ~~> O
   |  |         |                 |           |  |
   |  +---------+                 +-----------+  |
   +---------------------------------------------+

E.g. if the emitted Flow gets a cancellation, the Source of course is cancelled, however the Sink will also be completed. The table below illustrates the effects in detail:

Returned Flow Sink (in) Source (out)
cause: upstream (sink-side) receives completion effect: receives completion effect: receives cancel
cause: upstream (sink-side) receives error effect: receives error effect: receives cancel
cause: downstream (source-side) receives cancel effect: completes effect: receives cancel
effect: cancels upstream, completes downstream effect: completes cause: signals complete
effect: cancels upstream, errors downstream effect: receives error cause: signals error or throws
effect: cancels upstream, completes downstream cause: cancels effect: receives cancel

See also fromSinkAndSourceCoupledMat when access to materialized values of the parameters is needed.

Attributes

Source
Flow.scala
def fromSinkAndSourceCoupledMat[I, O, M1, M2, M](sink: Graph[SinkShape[I], M1], source: Graph[SourceShape[O], M2], combine: Function2[M1, M2, M]): Flow[I, O, M]

Allows coupling termination (cancellation, completion, erroring) of Sinks and Sources while creating a Flow from them. Similar to Flow.fromSinkAndSource however couples the termination of these two operators.

Allows coupling termination (cancellation, completion, erroring) of Sinks and Sources while creating a Flow from them. Similar to Flow.fromSinkAndSource however couples the termination of these two operators.

The resulting flow can be visualized as:

   +-----------------------------------------------------+
   | Resulting Flow[I, O, M]                             |
   |                                                     |
   |  +-------------+                 +---------------+  |
   |  |             |                 |               |  |
I  ~~> | Sink[I, M1] | ~~~(coupled)~~~ | Source[O, M2] | ~~> O
   |  |             |                 |               |  |
   |  +-------------+                 +---------------+  |
   +-----------------------------------------------------+

E.g. if the emitted Flow gets a cancellation, the Source of course is cancelled, however the Sink will also be completed. The table on Flow.fromSinkAndSourceCoupled illustrates the effects in detail.

The combine function is used to compose the materialized values of the sink and source into the materialized value of the resulting Flow.

Attributes

Source
Flow.scala
def fromSinkAndSourceMat[I, O, M1, M2, M](sink: Graph[SinkShape[I], M1], source: Graph[SourceShape[O], M2], combine: Function2[M1, M2, M]): Flow[I, O, M]

Creates a Flow from a Sink and a Source where the Flow's input will be sent to the Sink and the Flow's output will come from the Source.

Creates a Flow from a Sink and a Source where the Flow's input will be sent to the Sink and the Flow's output will come from the Source.

The resulting flow can be visualized as:

   +-------------------------------------------------------+
   | Resulting Flow[I, O, M]                              |
   |                                                      |
   |  +-------------+                  +---------------+  |
   |  |             |                  |               |  |
I  ~~> | Sink[I, M1] | [no-connection!] | Source[O, M2] | ~~> O
   |  |             |                  |               |  |
   |  +-------------+                  +---------------+  |
   +------------------------------------------------------+

The completion of the Sink and Source sides of a Flow constructed using this method are independent. So if the Sink receives a completion signal, the Source side will remain unaware of that. If you are looking to couple the termination signals of the two sides use Flow.fromSinkAndSourceCoupledMat instead.

The combine function is used to compose the materialized values of the sink and source into the materialized value of the resulting Flow.

Attributes

Source
Flow.scala
def lazyCompletionStageFlow[I, O, M](create: Creator[CompletionStage[Flow[I, O, M]]]): Flow[I, O, CompletionStage[M]]

Defers invoking the create function to create a future flow until there downstream demand has caused upstream to send a first element.

Defers invoking the create function to create a future flow until there downstream demand has caused upstream to send a first element.

The materialized future value is completed with the materialized value of the created flow when that has successfully been materialized.

If the create function throws or returns a future that fails the stream is failed, in this case the materialized future value is failed with a NeverMaterializedException.

Note that asynchronous boundaries (and other operators) in the stream may do pre-fetching which counter acts the laziness and can trigger the factory earlier than expected.

'''Emits when''' the internal flow is successfully created and it emits

'''Backpressures when''' the internal flow is successfully created and it backpressures or downstream backpressures

'''Completes when''' upstream completes and all elements have been emitted from the internal flow

'''Cancels when''' downstream cancels

Attributes

Source
Flow.scala
def lazyFlow[I, O, M](create: Creator[Flow[I, O, M]]): Flow[I, O, CompletionStage[M]]

Defers invoking the create function to create a future flow until there is downstream demand and passing that downstream demand upstream triggers the first element.

Defers invoking the create function to create a future flow until there is downstream demand and passing that downstream demand upstream triggers the first element.

Note that asynchronous boundaries (and other operators) in the stream may do pre-fetching which counter acts the laziness and can trigger the factory earlier than expected.

'''Emits when''' the internal flow is successfully created and it emits

'''Backpressures when''' the internal flow is successfully created and it backpressures or downstream backpressures

'''Completes when''' upstream completes and all elements have been emitted from the internal flow

'''Cancels when''' downstream cancels

Attributes

Source
Flow.scala
def of[T](clazz: Class[T]): Flow[T, T, NotUsed]

Create a Flow which can process elements of type T.

Create a Flow which can process elements of type T.

Attributes

Source
Flow.scala
def optionalVia[FIn, FOut, FViaOut, FMat, FViaMat, Mat](flow: Flow[FIn, Optional[FOut], FMat], viaFlow: Flow[FOut, FViaOut, FViaMat], combine: Function2[FMat, FViaMat, Mat]): Flow[FIn, Optional[FViaOut], Mat]

Creates a Flow from an existing base Flow outputting an optional element and applying an additional viaFlow only if the element in the stream is defined.

Creates a Flow from an existing base Flow outputting an optional element and applying an additional viaFlow only if the element in the stream is defined.

'''Emits when''' the provided viaFlow is runs with defined elements

'''Backpressures when''' the viaFlow runs for the defined elements and downstream backpressures

'''Completes when''' upstream completes

'''Cancels when''' downstream cancels

Value parameters

combine

How to combine the materialized values of flow and viaFlow

flow

The base flow that outputs an optional element

viaFlow

The flow that gets used if the optional element in is defined.

Attributes

Returns

a Flow with the viaFlow applied onto defined elements of the flow. The output value is contained within an Optional which indicates whether the original flow's element had viaFlow applied.

Since

1.1.0

Source
Flow.scala
def upcast[In, SuperOut, Out <: SuperOut, M](flow: Flow[In, Out, M]): Flow[In, SuperOut, M]

Upcast a stream of elements to a stream of supertypes of that element. Useful in combination with fan-in operators where you do not want to pay the cost of casting each element in a map.

Upcast a stream of elements to a stream of supertypes of that element. Useful in combination with fan-in operators where you do not want to pay the cost of casting each element in a map.

Type parameters

SuperOut

a supertype to the type of element flowing out of the flow

Attributes

Returns

A flow that accepts In and outputs elements of the super type

Source
Flow.scala

Deprecated methods

def lazyInit[I, O, M](flowFactory: Function[I, CompletionStage[Flow[I, O, M]]], fallback: Creator[M]): Flow[I, O, M]

Creates a real Flow upon receiving the first element. Internal Flow will not be created if there are no elements, because of completion, cancellation, or error.

Creates a real Flow upon receiving the first element. Internal Flow will not be created if there are no elements, because of completion, cancellation, or error.

The materialized value of the Flow is the value that is created by the fallback function.

'''Emits when''' the internal flow is successfully created and it emits

'''Backpressures when''' the internal flow is successfully created and it backpressures

'''Completes when''' upstream completes and all elements have been emitted from the internal flow

'''Cancels when''' downstream cancels

Attributes

Deprecated
true
Source
Flow.scala
def lazyInitAsync[I, O, M](flowFactory: Creator[CompletionStage[Flow[I, O, M]]]): Flow[I, O, CompletionStage[Optional[M]]]

Creates a real Flow upon receiving the first element. Internal Flow will not be created if there are no elements, because of completion, cancellation, or error.

Creates a real Flow upon receiving the first element. Internal Flow will not be created if there are no elements, because of completion, cancellation, or error.

The materialized value of the Flow is a Future[Option[M]] that is completed with Some(mat) when the internal flow gets materialized or with None when there where no elements. If the flow materialization (including the call of the flowFactory) fails then the future is completed with a failure.

'''Emits when''' the internal flow is successfully created and it emits

'''Backpressures when''' the internal flow is successfully created and it backpressures

'''Completes when''' upstream completes and all elements have been emitted from the internal flow

'''Cancels when''' downstream cancels

Attributes

Deprecated
true
Source
Flow.scala
def setup[I, O, M](factory: BiFunction[ActorMaterializer, Attributes, Flow[I, O, M]]): Flow[I, O, CompletionStage[M]]

Defers the creation of a Flow until materialization. The factory function exposes ActorMaterializer which is going to be used during materialization and Attributes of the Flow returned by this method.

Defers the creation of a Flow until materialization. The factory function exposes ActorMaterializer which is going to be used during materialization and Attributes of the Flow returned by this method.

Attributes

Deprecated
true
Source
Flow.scala