public static <T> CompletableFuture<T> accumulate(final Monoid<T> reducer, final IterableX<CompletableFuture<T>> fts
           ) {
        return sequence(fts).thenApply(s -> s
                                             .reduce(reducer));
    }
public static < T > CompletableFuture < T > accumulate ( final Monoid < T > reducer , final IterableX < CompletableFuture < T > > fts ) { return sequence ( fts ) . thenApply ( s -> s . reduce ( reducer ) ) ; }
Asynchronously accumulate the results only from the provided Futures,
reducing them using the supplied Monoid (a combining BiFunction/BinaryOperator and identity element that takes two
input values of the same type and returns the combined result) {@see cyclops2.Monoids }.

A single Failure results in a Failed  Future.

<pre>
{@code
CompletableFuture<Integer> just =CompletableFuture.completedFuture(10);

CompletableFuture<Integer> future =CompletableFutures.accumulate(Monoids.intSum,Seq.of(just,CompletableFuture.completableFuture(1)));
CompletableFuture[11]
}
</pre>


@param fts Collection of Futures to accumulate successes
@param reducer Monoid to combine values from each Future
@return CompletableFuture asynchronously populated with the accumulate operation