object
MergeFlow
Value Members
-
final
def
!=(arg0: Any): Boolean
-
final
def
##(): Int
-
final
def
==(arg0: Any): Boolean
-
def
apply[A, B, Ctx](flowPredicatePairs: (ContextFlow[A, B, Ctx], (A) ⇒ Boolean)*): ContextFlow[A, B, Ctx]
-
final
def
asInstanceOf[T0]: T0
-
def
clone(): AnyRef
-
final
def
eq(arg0: AnyRef): Boolean
-
def
equals(arg0: Any): Boolean
-
def
finalize(): Unit
-
final
def
getClass(): Class[_]
-
def
hashCode(): Int
-
final
def
isInstanceOf[T0]: Boolean
-
def
merge[A, B, Ctx](flows: ContextFlow[A, B, Ctx]*): ContextFlow[A, B, Ctx]
-
final
def
ne(arg0: AnyRef): Boolean
-
final
def
notify(): Unit
-
final
def
notifyAll(): Unit
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
-
def
toString(): String
-
final
def
wait(): Unit
-
final
def
wait(arg0: Long, arg1: Int): Unit
-
final
def
wait(arg0: Long): Unit
-
def
withContext[A, B, Ctx](flowPredicatePairs: (ContextFlow[A, B, Ctx], (A, Ctx, Metadata) ⇒ Boolean)*): ContextFlow[A, B, Ctx]
Inherited from AnyRef
Inherited from Any
MergeFlow provides a way to apply branching logic to a flow. It works as follows: with each flow, you assign a predicate that determines the conditions under which that flow should be applied. Generally, these predicates should be mutually exclusive and cover all possible cases, but this is not enforced. Together, these form a list of flow-predicate pairs. From these, a new flow is constructed, in which (in order) - Each item in the flow is broadcast to N child flows - Each child flow is filtered according to the associated predicate. - The items for which the predicate is true are passed down the associated flow. - Items that are errors (and hence to which none of the predicates apply) are propogated in another error flow. - The items in each flow are merged back into a single flow.
+------------+ | | | Broadcast | | | +------+-----+ /|\ / | \ / | \ / | \ / | \ / | \ / | \ / | \ +----------+ +-------+ +-------------+ |Predicate | | ... | | Errors | |1 Applied | | | | Propgated | | | | | | | +-----+----+ +---+---+ +------+------+ | | | | | | +-----+----+ +---+---+ / | Flow 1 | | Flows | / | | | | / +-----\----+ +---+---+ / \ | / \ | / \ | / \ | / \ | / \ | / \ | / \ | / \ |/ +----------------+ | | | Merge | | | +----------------+
// Given two flows, one for handling positive ints and another // for handling negative ints, (both of type ContextFlow[Int, Int, Ctx]), // create a new flow that will handle positive ints with the postive flow // and negative ints with the negative flow. val flow: ContextFlow[Int, Int, Ctx] = MergeFlow( (positiveIntFlow, _ >= 0), (negativeIntFlow, _ < 0) )