com.pivovarit.collectors.FutureCollectors Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of parallel-collectors Show documentation
Show all versions of parallel-collectors Show documentation
Parallel collection processing with customizable thread pools
The newest version!
package com.pivovarit.collectors;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collector;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.toList;
/**
* @author Grzegorz Piwowarek
*/
final class FutureCollectors {
static Collector, ?, CompletableFuture> toFuture(Collector collector) {
return Collectors.collectingAndThen(toList(), list -> {
var future = CompletableFuture.allOf(list.toArray(CompletableFuture[]::new))
.thenApply(__ -> list.stream()
.map(CompletableFuture::join)
.collect(collector));
for (var f : list) {
f.whenComplete((__, throwable) -> {
if (throwable != null) {
future.completeExceptionally(throwable);
}
});
}
return future;
});
}
static Collector, ?, CompletableFuture>> toFuture() {
return toFuture(toList());
}
}