public static <T, U> CompletableFuture<Stream<U>> thenComposeOnAll(CompletableFuture<Stream<T>> futurStream, Function<T, CompletableFuture<U>> action) { return futurStream .thenCompose(stream -> CompletableFutureUtil.allOf( stream.map(action))); }
@SafeVarargs public static <T> CompletableFuture<Stream<T>> allOfArray(CompletableFuture<T>... futures) { return allOf(Stream.of(futures)); }
/** * Constructs a FluentFutureStream from a Stream of Future */ public static <T> FluentFutureStream<T> of(Stream<CompletableFuture<T>> completableFutureStream) { return new FluentFutureStream<>(CompletableFutureUtil.allOf(completableFutureStream)); }
/** * Constructs a FluentFutureStream from a Stream of Future */ public static <T> FluentFutureStream<T> of(Stream<CompletableFuture<T>> completableFutureStream) { return new FluentFutureStream<>(CompletableFutureUtil.allOf(completableFutureStream)); }
/** * Constructs a FluentFutureStream from a Stream of Future */ public static <T> FluentFutureStream<T> of(Stream<CompletableFuture<T>> completableFutureStream) { return new FluentFutureStream<>(CompletableFutureUtil.allOf(completableFutureStream)); }
@Test void allOfShouldWorkOnVeryLargeStream() { CompletableFutureUtil.allOf( IntStream.range(0, 100000) .boxed() .map(CompletableFuture::completedFuture)) .join(); }
@Test public void allOfShouldWorkOnVeryLargeStream() { CompletableFutureUtil.allOf( IntStream.range(0, 100000) .boxed() .map(CompletableFuture::completedFuture)) .join(); }
@Test public void allOfShouldUnboxEmptyStream() { assertThat( CompletableFutureUtil.allOf(Stream.empty()) .join() .collect(Guavate.toImmutableList())) .isEmpty(); }
@Test void allOfShouldUnboxEmptyStream() { assertThat( CompletableFutureUtil.allOf(Stream.empty()) .join() .collect(Guavate.toImmutableList())) .isEmpty(); }
@Test public void allOfShouldUnboxStream() { long value1 = 18L; long value2 = 19L; long value3 = 20L; assertThat( CompletableFutureUtil.allOf( Stream.of( CompletableFuture.completedFuture(value1), CompletableFuture.completedFuture(value2), CompletableFuture.completedFuture(value3))) .join() .collect(Guavate.toImmutableList())) .containsOnly(value1, value2, value3); }
@Test void allOfShouldSupportNullValue() { assertThatCode(() -> CompletableFutureUtil.allOf( Stream.of( CompletableFuture.completedFuture(null), CompletableFuture.completedFuture(null), CompletableFuture.completedFuture(null))) .join() .collect(Collectors.toList())) .doesNotThrowAnyException(); }
@Test void allOfShouldUnboxStream() { long value1 = 18L; long value2 = 19L; long value3 = 20L; assertThat( CompletableFutureUtil.allOf( Stream.of( CompletableFuture.completedFuture(value1), CompletableFuture.completedFuture(value2), CompletableFuture.completedFuture(value3))) .join() .collect(Guavate.toImmutableList())) .containsOnly(value1, value2, value3); }
@Test void allOfShouldPreserveOrder() { long value1 = 18L; long value2 = 19L; long value3 = 20L; long value4 = 21L; long value5 = 22L; long value6 = 23L; long value7 = 24L; long value8 = 25L; long value9 = 26L; long value10 = 27L; assertThat( CompletableFutureUtil.allOf( Stream.of( CompletableFuture.completedFuture(value1), CompletableFuture.completedFuture(value2), CompletableFuture.completedFuture(value3), CompletableFuture.completedFuture(value4), CompletableFuture.completedFuture(value5), CompletableFuture.completedFuture(value6), CompletableFuture.completedFuture(value7), CompletableFuture.completedFuture(value8), CompletableFuture.completedFuture(value9), CompletableFuture.completedFuture(value10))) .join() .collect(Guavate.toImmutableList())) .containsExactly(value1, value2, value3, value4, value5, value6, value7, value8, value9, value10); }
@Test public void allOfShouldPreserveOrder() { long value1 = 18L; long value2 = 19L; long value3 = 20L; long value4 = 21L; long value5 = 22L; long value6 = 23L; long value7 = 24L; long value8 = 25L; long value9 = 26L; long value10 = 27L; assertThat( CompletableFutureUtil.allOf( Stream.of( CompletableFuture.completedFuture(value1), CompletableFuture.completedFuture(value2), CompletableFuture.completedFuture(value3), CompletableFuture.completedFuture(value4), CompletableFuture.completedFuture(value5), CompletableFuture.completedFuture(value6), CompletableFuture.completedFuture(value7), CompletableFuture.completedFuture(value8), CompletableFuture.completedFuture(value9), CompletableFuture.completedFuture(value10))) .join() .collect(Guavate.toImmutableList())) .containsExactly(value1, value2, value3, value4, value5, value6, value7, value8, value9, value10); }
@Test void pagingShouldWork() { int fetchSize = 200; int size = 2 * fetchSize + 50; CompletableFutureUtil.allOf( IntStream.range(0, size) .boxed() .map(i -> executor .executeVoid(insertInto(TABLE_NAME) .value(ID, UUID) .value(CLUSTERING, i)))) .join(); assertThat( executor.execute(select() .from(TABLE_NAME) .where(eq(ID, UUID)) .setFetchSize(fetchSize)) .join()) .hasSize(size); }
@Test void pagingShouldWork() { int fetchSize = 200; int size = 2 * fetchSize + 50; CompletableFutureUtil.allOf( IntStream.range(0, size) .boxed() .map(i -> executor .executeVoid(insertInto(TABLE_NAME) .value(ID, UUID) .value(CLUSTERING, i)))) .join(); assertThat( executor.execute(select() .from(TABLE_NAME) .where(eq(ID, UUID)) .setFetchSize(fetchSize)) .join()) .hasSize(size); }