Package software.amazon.awssdk.utils
Class CompletableFutureUtils
- java.lang.Object
-
- software.amazon.awssdk.utils.CompletableFutureUtils
-
public final class CompletableFutureUtils extends Object
Utility class for working withCompletableFuture.
-
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static CompletableFuture<Void>allOfExceptionForwarded(CompletableFuture<?>[] futures)Similar toCompletableFuture.allOf(CompletableFuture[]), but when any future is completed exceptionally, forwards the exception to other futures.static CompletionExceptionerrorAsCompletionException(Throwable t)Wraps the given error in aCompletionExceptionif necessary.static <U> CompletableFuture<U>failedFuture(Throwable t)Convenience method for creating a future that is immediately completed exceptionally with the givenThrowable.static <T> CompletableFuture<T>forwardExceptionTo(CompletableFuture<T> src, CompletableFuture<?> dst)Forward theThrowablefromsrctodst.static <T> CompletableFuture<T>forwardResultTo(CompletableFuture<T> src, CompletableFuture<T> dst)Completes thedstfuture based on the result of thesrcfuture asynchronously on the providedExecutorand return thesrcfuture.static <T> CompletableFuture<T>forwardResultTo(CompletableFuture<T> src, CompletableFuture<T> dst, Executor executor)Completes thedstfuture based on the result of thesrcfuture asynchronously on the providedExecutorand return thesrcfuture.static <T> CompletableFuture<T>forwardTransformedExceptionTo(CompletableFuture<T> src, CompletableFuture<?> dst, Function<Throwable,Throwable> transformationFunction)Forward theThrowablethat can be transformed as per the transformationFunction fromsrctodst.static <SourceT,DestT>
CompletableFuture<SourceT>forwardTransformedResultTo(CompletableFuture<SourceT> src, CompletableFuture<DestT> dst, Function<SourceT,DestT> function)Completes thedstfuture based on the result of thesrcfuture, synchronously, after applying the provided transformationFunctionif successful.static <T> TjoinInterruptibly(CompletableFuture<T> future)static voidjoinInterruptiblyIgnoringFailures(CompletableFuture<?> future)static <T> TjoinLikeSync(CompletableFuture<T> future)Joins (interruptibly) on the future, and re-throws any RuntimeExceptions or Errors just like the async task would have thrown if it was executed synchronously.
-
-
-
Method Detail
-
failedFuture
public static <U> CompletableFuture<U> failedFuture(Throwable t)
Convenience method for creating a future that is immediately completed exceptionally with the givenThrowable.Similar to
CompletableFuture#failedFuturewhich was added in Java 9.- Type Parameters:
U- The type of the element.- Parameters:
t- The failure.- Returns:
- The failed future.
-
errorAsCompletionException
public static CompletionException errorAsCompletionException(Throwable t)
Wraps the given error in aCompletionExceptionif necessary. Useful if an exception needs to be rethrown from withinCompletableFuture.handle(java.util.function.BiFunction)or similar methods.- Parameters:
t- The error.- Returns:
- The error as a CompletionException.
-
forwardExceptionTo
public static <T> CompletableFuture<T> forwardExceptionTo(CompletableFuture<T> src, CompletableFuture<?> dst)
Forward theThrowablefromsrctodst.- Parameters:
src- The source of theThrowable.dst- The destination where theThrowablewill be forwarded to.- Returns:
src.
-
forwardTransformedExceptionTo
public static <T> CompletableFuture<T> forwardTransformedExceptionTo(CompletableFuture<T> src, CompletableFuture<?> dst, Function<Throwable,Throwable> transformationFunction)
Forward theThrowablethat can be transformed as per the transformationFunction fromsrctodst.- Parameters:
src- The source of theThrowable.dst- The destination where theThrowablewill be forwarded totransformationFunction- Transformation function taht will be applied on to the forwarded exception.- Returns:
-
forwardResultTo
public static <T> CompletableFuture<T> forwardResultTo(CompletableFuture<T> src, CompletableFuture<T> dst)
Completes thedstfuture based on the result of thesrcfuture asynchronously on the providedExecutorand return thesrcfuture.- Parameters:
src- The sourceCompletableFuturedst- The destination where theThrowableor response will be forwarded to.- Returns:
- the
srcfuture.
-
forwardResultTo
public static <T> CompletableFuture<T> forwardResultTo(CompletableFuture<T> src, CompletableFuture<T> dst, Executor executor)
Completes thedstfuture based on the result of thesrcfuture asynchronously on the providedExecutorand return thesrcfuture.- Parameters:
src- The sourceCompletableFuturedst- The destination where theThrowableor response will be forwarded to.executor- the executor to complete the des future- Returns:
- the
srcfuture.
-
forwardTransformedResultTo
public static <SourceT,DestT> CompletableFuture<SourceT> forwardTransformedResultTo(CompletableFuture<SourceT> src, CompletableFuture<DestT> dst, Function<SourceT,DestT> function)
Completes thedstfuture based on the result of thesrcfuture, synchronously, after applying the provided transformationFunctionif successful. If the function threw an exception, the destination future will be completed exceptionally with that exception.- Parameters:
src- The sourceCompletableFuturedst- The destination where theThrowableor transformed result will be forwarded to.- Returns:
- the
srcfuture.
-
allOfExceptionForwarded
public static CompletableFuture<Void> allOfExceptionForwarded(CompletableFuture<?>[] futures)
Similar toCompletableFuture.allOf(CompletableFuture[]), but when any future is completed exceptionally, forwards the exception to other futures.- Parameters:
futures- The futures.- Returns:
- The new future that is completed when all the futures in
futuresare.
-
joinInterruptibly
public static <T> T joinInterruptibly(CompletableFuture<T> future)
-
joinInterruptiblyIgnoringFailures
public static void joinInterruptiblyIgnoringFailures(CompletableFuture<?> future)
-
joinLikeSync
public static <T> T joinLikeSync(CompletableFuture<T> future)
Joins (interruptibly) on the future, and re-throws any RuntimeExceptions or Errors just like the async task would have thrown if it was executed synchronously.
-
-