Class CompletableFutureUtils

java.lang.Object
software.amazon.awssdk.utils.CompletableFutureUtils

public final class CompletableFutureUtils extends Object
Utility class for working with CompletableFuture.
  • Method Details

    • failedFuture

      public static <U> CompletableFuture<U> failedFuture(Throwable t)
      Convenience method for creating a future that is immediately completed exceptionally with the given Throwable.

      Similar to CompletableFuture#failedFuture which 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 a CompletionException if necessary. Useful if an exception needs to be rethrown from within CompletableFuture.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 the Throwable from src to dst.
      Parameters:
      src - The source of the Throwable.
      dst - The destination where the Throwable will be forwarded to.
      Returns:
      src.
    • forwardTransformedExceptionTo

      public static <T> CompletableFuture<T> forwardTransformedExceptionTo(CompletableFuture<T> src, CompletableFuture<?> dst, Function<Throwable,Throwable> transformationFunction)
      Forward the Throwable that can be transformed as per the transformationFunction from src to dst.
      Parameters:
      src - The source of the Throwable.
      dst - The destination where the Throwable will be forwarded to
      transformationFunction - 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 the dst future based on the result of the src future asynchronously on the provided Executor and return the src future.
      Parameters:
      src - The source CompletableFuture
      dst - The destination where the Throwable or response will be forwarded to.
      Returns:
      the src future.
    • forwardResultTo

      public static <T> CompletableFuture<T> forwardResultTo(CompletableFuture<T> src, CompletableFuture<T> dst, Executor executor)
      Completes the dst future based on the result of the src future asynchronously on the provided Executor and return the src future.
      Parameters:
      src - The source CompletableFuture
      dst - The destination where the Throwable or response will be forwarded to.
      executor - the executor to complete the des future
      Returns:
      the src future.
    • forwardTransformedResultTo

      public static <SourceT, DestT> CompletableFuture<SourceT> forwardTransformedResultTo(CompletableFuture<SourceT> src, CompletableFuture<DestT> dst, Function<SourceT,DestT> function)
      Completes the dst future based on the result of the src future, synchronously, after applying the provided transformation Function if successful.
      Parameters:
      src - The source CompletableFuture
      dst - The destination where the Throwable or transformed result will be forwarded to.
      Returns:
      the src future.
    • allOfExceptionForwarded

      public static CompletableFuture<Void> allOfExceptionForwarded(CompletableFuture<?>[] futures)
      Similar to CompletableFuture.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 futures are.
    • 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.