T
- The type of the elements that the publisher emits.public interface PublisherBuilder<T> extends TransformingOperators<T>, FilteringOperators<T>, PeekingOperators<T>, ConsumingOperators<T>, ErrorHandlingOperators<T>, ConnectingOperators<T>
Publisher
.
The documentation for each operator uses marble diagrams to visualize how the operator functions. Each element flowing in and out of the stream is represented as a coloured marble that has a value, with the operator applying some transformation or some side effect, termination and error signals potentially being passed, and for operators that subscribe to the stream, an output value being redeemed at the end.
Below is an example diagram labelling all the parts of the stream.
ReactiveStreams
Modifier and Type | Method and Description |
---|---|
org.reactivestreams.Publisher<T> |
buildRs()
Build this stream, using the first
ReactiveStreamsEngine found by the ServiceLoader . |
org.reactivestreams.Publisher<T> |
buildRs(ReactiveStreamsEngine engine)
Build this stream, using the supplied
ReactiveStreamsEngine . |
CompletionRunner<Void> |
cancel()
Cancels the stream as soon as it is run.
|
<R,A> CompletionRunner<R> |
collect(Collector<? super T,A,R> collector)
Collect the elements emitted by this stream using the given
Collector . |
<R> CompletionRunner<R> |
collect(Supplier<R> supplier,
BiConsumer<R,? super T> accumulator)
Collect the elements emitted by this stream using a
Collector built from the given
supplier and accumulator . |
PublisherBuilder<T> |
distinct()
Creates a stream consisting of the distinct elements (according to
Object.equals(Object) ) of this stream. |
PublisherBuilder<T> |
dropWhile(Predicate<? super T> predicate)
Drop the longest prefix of elements from this stream that satisfy the given
predicate . |
PublisherBuilder<T> |
filter(Predicate<? super T> predicate)
Filter elements emitted by this publisher using the given
Predicate . |
CompletionRunner<Optional<T>> |
findFirst()
Find the first element emitted by the
Publisher , and return it in a
CompletionStage . |
<S> PublisherBuilder<S> |
flatMap(Function<? super T,? extends PublisherBuilder<? extends S>> mapper)
Map the elements to publishers, and flatten so that the elements emitted by publishers produced by the
mapper function are emitted from this stream. |
<S> PublisherBuilder<S> |
flatMapCompletionStage(Function<? super T,? extends CompletionStage<? extends S>> mapper)
Map the elements to
CompletionStage , and flatten so that the elements the values redeemed by each
CompletionStage are emitted from this stream. |
<S> PublisherBuilder<S> |
flatMapIterable(Function<? super T,? extends Iterable<? extends S>> mapper)
Map the elements to
Iterable 's, and flatten so that the elements contained in each iterable are
emitted by this stream. |
<S> PublisherBuilder<S> |
flatMapRsPublisher(Function<? super T,? extends org.reactivestreams.Publisher<? extends S>> mapper)
Map the elements to publishers, and flatten so that the elements emitted by publishers produced by the
mapper function are emitted from this stream. |
CompletionRunner<Void> |
forEach(Consumer<? super T> action)
Performs an action for each element on this stream.
|
CompletionRunner<Void> |
ignore()
Ignores each element of this stream.
|
PublisherBuilder<T> |
limit(long maxSize)
Truncate this stream, ensuring the stream is no longer than
maxSize elements in length. |
<R> PublisherBuilder<R> |
map(Function<? super T,? extends R> mapper)
Map the elements emitted by this stream using the
mapper function. |
PublisherBuilder<T> |
onComplete(Runnable action)
Returns a stream containing all the elements from this stream, additionally performing the provided action when this
stream completes.
|
PublisherBuilder<T> |
onError(Consumer<Throwable> errorHandler)
Returns a stream containing all the elements from this stream, additionally performing the provided action if this
stream conveys an error.
|
PublisherBuilder<T> |
onErrorResume(Function<Throwable,? extends T> errorHandler)
Returns a stream containing all the elements from this stream.
|
PublisherBuilder<T> |
onErrorResumeWith(Function<Throwable,? extends PublisherBuilder<? extends T>> errorHandler)
Returns a stream containing all the elements from this stream.
|
PublisherBuilder<T> |
onErrorResumeWithRsPublisher(Function<Throwable,? extends org.reactivestreams.Publisher<? extends T>> errorHandler)
Returns a stream containing all the elements from this stream.
|
PublisherBuilder<T> |
onTerminate(Runnable action)
Returns a stream containing all the elements from this stream, additionally performing the provided action when this
stream completes or failed.
|
PublisherBuilder<T> |
peek(Consumer<? super T> consumer)
Returns a stream containing all the elements from this stream, additionally performing the provided action on each
element.
|
CompletionRunner<Optional<T>> |
reduce(BinaryOperator<T> accumulator)
Perform a reduction on the elements of this stream, using the provided accumulation function.
|
CompletionRunner<T> |
reduce(T identity,
BinaryOperator<T> accumulator)
Perform a reduction on the elements of this stream, using the provided identity value and the accumulation
function.
|
PublisherBuilder<T> |
skip(long n)
Discard the first
n of this stream. |
PublisherBuilder<T> |
takeWhile(Predicate<? super T> predicate)
Take the longest prefix of elements from this stream that satisfy the given
predicate . |
CompletionRunner<Void> |
to(org.reactivestreams.Subscriber<? super T> subscriber)
Connect the outlet of the
Publisher built by this builder to the given Subscriber . |
<R> CompletionRunner<R> |
to(SubscriberBuilder<? super T,? extends R> subscriber)
Connect the outlet of this stream to the given
SubscriberBuilder graph. |
CompletionRunner<List<T>> |
toList()
Collect the elements emitted by this stream into a
List . |
<R> PublisherBuilder<R> |
via(org.reactivestreams.Processor<? super T,? extends R> processor)
Connect the outlet of this stream to the given
Processor . |
<R> PublisherBuilder<R> |
via(ProcessorBuilder<? super T,? extends R> processor)
Connect the outlet of the
Publisher built by this builder to the given ProcessorBuilder . |
<R> PublisherBuilder<R> map(Function<? super T,? extends R> mapper)
mapper
function.
map
in interface TransformingOperators<T>
R
- The type of elements that the mapper
function emits.mapper
- The function to use to map the elements.<S> PublisherBuilder<S> flatMap(Function<? super T,? extends PublisherBuilder<? extends S>> mapper)
mapper
function are emitted from this stream.
This method operates on one publisher at a time. The result is a concatenation of elements emitted from all the publishers produced by the mapper function.
Unlike TransformingOperators.flatMapRsPublisher(Function)
}, the mapper function returns a
org.eclipse.microprofile.reactive.streams
type instead of an
org.reactivestreams
type.
flatMap
in interface TransformingOperators<T>
S
- The type of the elements emitted from the new stream.mapper
- The mapper function.<S> PublisherBuilder<S> flatMapRsPublisher(Function<? super T,? extends org.reactivestreams.Publisher<? extends S>> mapper)
mapper
function are emitted from this stream.
This method operates on one publisher at a time. The result is a concatenation of elements emitted from all the publishers produced by the mapper function.
Unlike TransformingOperators.flatMap(Function)
, the mapper function returns a org.eclipse.microprofile.reactive.streams
builder instead of an org.reactivestreams
type.
flatMapRsPublisher
in interface TransformingOperators<T>
S
- The type of the elements emitted from the new stream.mapper
- The mapper function.<S> PublisherBuilder<S> flatMapCompletionStage(Function<? super T,? extends CompletionStage<? extends S>> mapper)
CompletionStage
, and flatten so that the elements the values redeemed by each
CompletionStage
are emitted from this stream.
This method only works with one element at a time. When an element is received, the mapper
function is
executed, and the next element is not consumed or passed to the mapper
function until the previous
CompletionStage
is redeemed. Hence this method also guarantees that ordering of the stream is maintained.
flatMapCompletionStage
in interface TransformingOperators<T>
S
- The type of the elements emitted from the new stream.mapper
- The mapper function.<S> PublisherBuilder<S> flatMapIterable(Function<? super T,? extends Iterable<? extends S>> mapper)
Iterable
's, and flatten so that the elements contained in each iterable are
emitted by this stream.
This method operates on one iterable at a time. The result is a concatenation of elements contain in all the
iterables returned by the mapper
function.
flatMapIterable
in interface TransformingOperators<T>
S
- The type of the elements emitted from the new stream.mapper
- The mapper function.PublisherBuilder<T> filter(Predicate<? super T> predicate)
Predicate
.
Any elements that return true
when passed to the Predicate
will be emitted, all other
elements will be dropped.
filter
in interface FilteringOperators<T>
predicate
- The predicate to apply to each element.PublisherBuilder<T> distinct()
Object.equals(Object)
) of this stream.
distinct
in interface FilteringOperators<T>
PublisherBuilder<T> limit(long maxSize)
maxSize
elements in length.
If maxSize
is reached, the stream will be completed, and upstream will be cancelled. Completion of the
stream will occur immediately when the element that satisfies the maxSize
is received.
limit
in interface FilteringOperators<T>
maxSize
- The maximum size of the returned stream.PublisherBuilder<T> skip(long n)
n
of this stream. If this stream contains fewer than n
elements, this stream will
effectively be an empty stream.
skip
in interface FilteringOperators<T>
n
- The number of elements to discard.PublisherBuilder<T> takeWhile(Predicate<? super T> predicate)
predicate
.
When the predicate
returns false, the stream will be completed, and upstream will be cancelled.
takeWhile
in interface FilteringOperators<T>
predicate
- The predicate.PublisherBuilder<T> dropWhile(Predicate<? super T> predicate)
predicate
.
As long as the predicate
returns true, no elements will be emitted from this stream. Once the first element
is encountered for which the predicate
returns false, all subsequent elements will be emitted, and the
predicate
will no longer be invoked.
dropWhile
in interface FilteringOperators<T>
predicate
- The predicate.PublisherBuilder<T> peek(Consumer<? super T> consumer)
peek
in interface PeekingOperators<T>
consumer
- The function called for every element.T
and emits the same elements. In between,
the given function is called for each element.PublisherBuilder<T> onError(Consumer<Throwable> errorHandler)
onError
in interface PeekingOperators<T>
errorHandler
- The function called with the failure.T
and emits the same elements. If the
stream conveys a failure, the given error handler is called.PublisherBuilder<T> onTerminate(Runnable action)
PeekingOperators.onError(Consumer)
and PeekingOperators.onComplete(Runnable)
. In addition, the action is called if
the stream is cancelled downstream.
onTerminate
in interface PeekingOperators<T>
action
- The function called when the stream completes or failed.T
and emits the same elements. The given
action is called when the stream completes or fails.PublisherBuilder<T> onComplete(Runnable action)
onComplete
in interface PeekingOperators<T>
action
- The function called when the stream completes.T
and emits the same elements. The given
action is called when the stream completes.CompletionRunner<Void> forEach(Consumer<? super T> action)
The returned CompletionStage
will be redeemed when the stream completes, either successfully if the stream
completes normally, or with an error if the stream completes with an error or if the action throws an exception.
forEach
in interface ConsumingOperators<T>
action
- The action.CompletionRunner
that can be used to run the stream.CompletionRunner<Void> ignore()
The returned CompletionStage
will be redeemed when the stream completes, either successfully if the
stream completes normally, or with an error if the stream completes with an error or if the action throws an
exception.
ignore
in interface ConsumingOperators<T>
CompletionRunner
that can be used to run the stream.CompletionRunner<Void> cancel()
The returned CompletionStage
will be immediately redeemed as soon as the stream is run.
cancel
in interface ConsumingOperators<T>
CompletionRunner
that can be used to run the stream.CompletionRunner<T> reduce(T identity, BinaryOperator<T> accumulator)
The result of the reduction is returned in the CompletionStage
.
reduce
in interface ConsumingOperators<T>
identity
- The identity value.accumulator
- The accumulator function.CompletionRunner
that can be used to run the stream.CompletionRunner<Optional<T>> reduce(BinaryOperator<T> accumulator)
The result of the reduction is returned as an Optional<T>
in the CompletionStage
. If there are no elements in this stream,
empty will be returned.
reduce
in interface ConsumingOperators<T>
accumulator
- The accumulator function.CompletionRunner
that can be used to run the stream.CompletionRunner<Optional<T>> findFirst()
Publisher
, and return it in a
CompletionStage
.
If the stream is completed before a single element is emitted, then Optional.empty()
will be emitted.
findFirst
in interface ConsumingOperators<T>
CompletionRunner
that can be used to run the stream.<R,A> CompletionRunner<R> collect(Collector<? super T,A,R> collector)
Collector
.
Since Reactive Streams are intrinsically sequential, only the accumulator of the collector will be used, the combiner will not be used.
collect
in interface ConsumingOperators<T>
R
- The result of the collector.A
- The accumulator type.collector
- The collector to collect the elements.CompletionRunner
that can be used to run the stream,
R is the result type of the collector's reduction operation.<R> CompletionRunner<R> collect(Supplier<R> supplier, BiConsumer<R,? super T> accumulator)
Collector
built from the given
supplier
and accumulator
.
Since Reactive Streams are intrinsically sequential, the combiner will not be used. This is why this method does not accept a combiner method.
collect
in interface ConsumingOperators<T>
R
- The result of the collector.supplier
- a function that creates a new result container. It creates objects of type <A>
.accumulator
- an associative, non-interfering, stateless function for incorporating an additional element into a
resultCompletionRunner
that can be used to run the stream which emits the collected result.CompletionRunner<List<T>> toList()
List
.
toList
in interface ConsumingOperators<T>
CompletionRunner
that can be used to run the stream that emits the list.PublisherBuilder<T> onErrorResume(Function<Throwable,? extends T> errorHandler)
By default, when a stream encounters an error that prevents it from emitting the expected item to its subscriber,
the stream invokes its subscriber's onError
method, and then terminates without invoking any more
of its subscriber's methods. This operator changes this behavior. If the current stream encounters an error,
instead of invoking its subscriber's onError
method, it will instead emit the return value of the
passed function. This operator prevents errors from propagating or to supply fallback data should errors be
encountered.
onErrorResume
in interface ErrorHandlingOperators<T>
errorHandler
- the function returning the value that needs to be emitting instead of the error.
The function must not return null
.PublisherBuilder<T> onErrorResumeWith(Function<Throwable,? extends PublisherBuilder<? extends T>> errorHandler)
PublisherBuilder
instead.
By default, when a stream encounters an error that prevents it from emitting the expected item to its subscriber,
the stream invokes its subscriber's onError
method, and then terminates without invoking any more
of its subscriber's methods. This operator changes this behavior. If the current stream encounters an error,
instead of invoking its subscriber's onError
method, it will instead relinquish control to the
PublisherBuilder
returned from the given function, which invokes the subscriber's onNext
method if it is able to do so. The subscriber's original Subscription
is used to
control the flow of elements both before and after any error occurring.
In such a case, because no publisher necessarily invokes onError
on the stream's subscriber,
it may never know that an error happened.
onErrorResumeWith
in interface ErrorHandlingOperators<T>
errorHandler
- the function returning the stream that needs to be emitting instead of the error.
The function must not return null
.PublisherBuilder<T> onErrorResumeWithRsPublisher(Function<Throwable,? extends org.reactivestreams.Publisher<? extends T>> errorHandler)
Publisher
instead.
By default, when a stream encounters an error that prevents it from emitting the expected item to its subscriber,
the stream invokes its subscriber's onError
method, and then terminates without invoking any more
of its subscriber's methods. This operator changes this behavior. If the current stream encounters an error,
instead of invoking its subscriber's onError
method, the subscriber will be fed from the
Publisher
returned from the given function, and the subscriber's onNext
method is called as the returned Publisher publishes. The subscriber's original Subscription
is used to
control the flow of both the original and the onError Publishers' elements.
In such a case, because no publisher necessarily invokes onError
,
the subscriber may never know that an error happened.
onErrorResumeWithRsPublisher
in interface ErrorHandlingOperators<T>
errorHandler
- the function returning the stream that need to be emitting instead of the error.
The function must not return null
.CompletionRunner<Void> to(org.reactivestreams.Subscriber<? super T> subscriber)
Publisher
built by this builder to the given Subscriber
.
The Reactive Streams specification states that a subscriber should cancel
any new stream subscription it receives if it already has an active subscription.
The returned result of this method is a stream that creates a subscription for the
subscriber passed in, so the resulting stream should only be run once.
For the same reason, the subscriber passed in should not have any active subscriptions
and should not be used in more than one call to this method.to
in interface ConnectingOperators<T>
subscriber
- The subscriber to connect.CompletionRunner
that can be used to run the composed stream.<R> CompletionRunner<R> to(SubscriberBuilder<? super T,? extends R> subscriber)
SubscriberBuilder
graph.
The Reactive Streams specification states that a subscriber should cancel
any new stream subscription it receives if it already has an active subscription.
For this reason, a subscriber builder, particularly any that represents a graph that
includes a user supplied Subscriber
or Processor
stage, should not be
used in the creation of more than one stream instance.to
in interface ConnectingOperators<T>
subscriber
- The subscriber builder to connect.CompletionRunner
that can be used to run the composed stream.<R> PublisherBuilder<R> via(ProcessorBuilder<? super T,? extends R> processor)
Publisher
built by this builder to the given ProcessorBuilder
.
The Reactive Streams specification states that a subscribing processor should cancel
any new stream subscription it receives if it already has an active subscription.
For this reason, a processor builder, particularly any that represents a graph that
includes a user supplied Processor
stage, should not be
used in the creation of more than one stream instance.via
in interface ConnectingOperators<T>
processor
- The processor builder to connect.<R> PublisherBuilder<R> via(org.reactivestreams.Processor<? super T,? extends R> processor)
Processor
.
The Reactive Streams specification states that a subscribing processor should cancel
any new stream subscription it receives if it already has an active subscription.
The returned result of this method is a stream that creates a subscription for the
processor passed in, so the resulting stream should only be run once.
For the same reason, the processor passed in should not have any active subscriptions
and should not be used in more than one call to this method.via
in interface ConnectingOperators<T>
processor
- The processor builder to connect.org.reactivestreams.Publisher<T> buildRs()
ReactiveStreamsEngine
found by the ServiceLoader
.Publisher
that will run this stream.org.reactivestreams.Publisher<T> buildRs(ReactiveStreamsEngine engine)
ReactiveStreamsEngine
.engine
- The engine to run the stream with.Publisher
that will run this stream.Copyright © 2019 Eclipse Foundation. All rights reserved.