Class AsyncFoldLeft
- java.lang.Object
-
- org.cometd.common.AsyncFoldLeft
-
public class AsyncFoldLeft extends Object
Processes asynchronously a sequence of elements, producing a result that is the reduction of the results produced by the processing of each element.
This class implements the asynchronous version of the following synchronous
for
loop, but where the processing of each element may be asynchronous.R result; for (T element : list) { (result, proceed) = operation.apply(result, element); if (!proceed) { break; } }
Using this class, the loop above becomes:
R zero; AsyncFoldLeft.run(list, zero, (result, element, loop) -> { CompletableFuture<R> future = processAsync(element); future.whenComplete((r, x) -> { if (x == null) { R reduced = reduce(result, r); if (shouldIterate(r)) { loop.proceed(reduced); } else { loop.leave(reduced); } } else { loop.fail(x); } }) }, Promise.complete((r, x) -> { // Process final result or failure. });
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
AsyncFoldLeft.Loop<R>
Controls the iteration over a sequence of elements, allowing to continue the iteration (with a result), break out of the iteration (with a result), or fail the iteration (with an exception).static interface
AsyncFoldLeft.Operation<T,R>
The operation to invoke for each element.
-
Constructor Summary
Constructors Constructor Description AsyncFoldLeft()
-
Method Summary
All Methods Static Methods Concrete Methods Deprecated Methods Modifier and Type Method Description static <T,R>
voidrun(Collection<T> collection, R zero, AsyncFoldLeft.Operation<T,R> operation, Promise<R> promise)
Processes the givencollection
of elements.static <T,R>
voidrun(List<T> list, R zero, AsyncFoldLeft.Operation<T,R> operation, Promise<R> promise)
Deprecated.userun(Collection, Object, Operation, Promise)
instead.static <T,R>
voidrun(T[] array, R zero, AsyncFoldLeft.Operation<T,R> operation, Promise<R> promise)
-
-
-
Method Detail
-
run
public static <T,R> void run(T[] array, R zero, AsyncFoldLeft.Operation<T,R> operation, Promise<R> promise)
-
run
@Deprecated public static <T,R> void run(List<T> list, R zero, AsyncFoldLeft.Operation<T,R> operation, Promise<R> promise)
Deprecated.userun(Collection, Object, Operation, Promise)
instead.Processes the given
list
of elements.The initial result
zero
is returned if the list is empty.For each element the
operation
function is invoked.- Type Parameters:
T
- the type of elementR
- the type of the result- Parameters:
list
- the elements to processzero
- the initial resultoperation
- the operation to invoke for each elementpromise
- the promise to notify of the final result
-
run
public static <T,R> void run(Collection<T> collection, R zero, AsyncFoldLeft.Operation<T,R> operation, Promise<R> promise)
Processes the given
collection
of elements.The initial result
zero
is returned if the collection is empty.For each element the
operation
function is invoked.The
collection
should have a "stable" iterator, i.e. it should not be affected if the collection is modified concurrently by another thread, or by the same thread in thoperation
during the iteration.- Type Parameters:
T
- the type of elementR
- the type of the result- Parameters:
collection
- the elements to processzero
- the initial resultoperation
- the operation to invoke for each elementpromise
- the promise to notify of the final result
-
-