Class Futures.FutureCombiner<V extends @Nullable Object>

java.lang.Object
com.google.common.util.concurrent.Futures.FutureCombiner<V>
Enclosing class:
Futures

@GwtCompatible public static final class Futures.FutureCombiner<V extends @Nullable Object> extends Object
A helper to create a new ListenableFuture whose result is generated from a combination of input futures.

See Futures.whenAllComplete(com.google.common.util.concurrent.ListenableFuture<? extends V>...) and Futures.whenAllSucceed(com.google.common.util.concurrent.ListenableFuture<? extends V>...) for how to instantiate this class.

Example:


 final ListenableFuture<Instant> loginDateFuture =
     loginService.findLastLoginDate(username);
 final ListenableFuture<List<String>> recentCommandsFuture =
     recentCommandsService.findRecentCommands(username);
 ListenableFuture<UsageHistory> usageFuture =
     Futures.whenAllSucceed(loginDateFuture, recentCommandsFuture)
         .call(
             () ->
                 new UsageHistory(
                     username,
                     Futures.getDone(loginDateFuture),
                     Futures.getDone(recentCommandsFuture)),
             executor);
 
Since:
20.0
Author:
Kevin Bourrillion, Nishant Thakkar, Sven Mawson
  • Method Details

    • callAsync

      public <C extends @Nullable Object> ListenableFuture<C> callAsync(AsyncCallable<C> combiner, Executor executor)
      Creates the ListenableFuture which will return the result of calling AsyncCallable.call() in combiner when all futures complete, using the specified executor.

      If the combiner throws a CancellationException, the returned future will be cancelled.

      If the combiner throws an ExecutionException, the cause of the thrown ExecutionException will be extracted and returned as the cause of the new ExecutionException that gets thrown by the returned combined future.

      Canceling this future will attempt to cancel all the component futures.

      Returns:
      a future whose result is based on combiner (or based on the input futures passed to whenAllSucceed, if that is the method you used to create this FutureCombiner). Even if you don't care about the value of the future, you should typically check whether it failed: See https://errorprone.info/bugpattern/FutureReturnValueIgnored.
    • call

      public <C extends @Nullable Object> ListenableFuture<C> call(Callable<C> combiner, Executor executor)
      Creates the ListenableFuture which will return the result of calling Callable.call() in combiner when all futures complete, using the specified executor.

      If the combiner throws a CancellationException, the returned future will be cancelled.

      If the combiner throws an ExecutionException, the cause of the thrown ExecutionException will be extracted and returned as the cause of the new ExecutionException that gets thrown by the returned combined future.

      Canceling this future will attempt to cancel all the component futures.

      Returns:
      a future whose result is based on combiner (or based on the input futures passed to whenAllSucceed, if that is the method you used to create this FutureCombiner). Even if you don't care about the value of the future, you should typically check whether it failed: See https://errorprone.info/bugpattern/FutureReturnValueIgnored.
    • run

      public ListenableFuture<?> run(Runnable combiner, Executor executor)
      Creates the ListenableFuture which will return the result of running combiner when all Futures complete. combiner will run using executor.

      If the combiner throws a CancellationException, the returned future will be cancelled.

      Canceling this Future will attempt to cancel all the component futures.

      Returns:
      a future whose result is based on combiner (or based on the input futures passed to whenAllSucceed, if that is the method you used to create this FutureCombiner). Even though the future never produces a value other than null, you should typically check whether it failed: See https://errorprone.info/bugpattern/FutureReturnValueIgnored.
      Since:
      23.6