Async sequence
This commit is contained in:
parent
ecd8974c56
commit
fed608d6fa
@ -10,6 +10,7 @@ import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.TreeSet;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.CompletionStage;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
@ -145,6 +146,12 @@ public class CompletableFutureUtils {
|
||||
futures.stream().map(CompletableFuture::join).forEachOrdered(consumer);
|
||||
}
|
||||
|
||||
public static <T> void forEachOrderedSet(CompletableFuture<LinkedHashSet<CompletableFuture<T>>> futureList,
|
||||
Consumer<T> consumer) {
|
||||
var futures = futureList.join();
|
||||
futures.stream().map(CompletableFuture::join).forEachOrdered(consumer);
|
||||
}
|
||||
|
||||
public static <T> void forEach(CompletableFuture<List<CompletableFuture<T>>> futureList, Consumer<T> consumer) {
|
||||
futureList.join().parallelStream().map(CompletableFuture::join).forEach(consumer);
|
||||
}
|
||||
@ -177,6 +184,34 @@ public class CompletableFutureUtils {
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Accept values synchronously from an async sequence
|
||||
*/
|
||||
public static <T> CompletableFuture<?> acceptSequenceAsync(Collection<CompletableFuture<T>> collection,
|
||||
Function<T, CompletionStage<?>> runner,
|
||||
ExecutorService executorService) {
|
||||
CompletableFuture<?> result = CompletableFuture.completedFuture(null);
|
||||
for (CompletableFuture<T> completableFuture : collection) {
|
||||
result = result.thenComposeAsync(x -> completableFuture.thenComposeAsync(runner::apply, executorService),
|
||||
executorService
|
||||
);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Accept values synchronously from an async sequence
|
||||
*/
|
||||
public static <T> CompletableFuture<?> acceptSequenceAsync(Collection<CompletableFuture<T>> collection,
|
||||
Consumer<T> runner,
|
||||
ExecutorService executorService) {
|
||||
CompletableFuture<?> result = CompletableFuture.completedFuture(null);
|
||||
for (CompletableFuture<T> completableFuture : collection) {
|
||||
result = result.thenComposeAsync(x -> completableFuture.thenAcceptAsync(runner, executorService), executorService);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public static <T> CompletableFuture<T> applySequenceAsync(T initialValue, Collection<Function<T, CompletableFuture<T>>> collection, ExecutorService executorService) {
|
||||
var result = CompletableFuture.completedFuture(initialValue);
|
||||
for (Function<T, CompletableFuture<T>> item : collection) {
|
||||
|
Loading…
Reference in New Issue
Block a user