JAMES-2291 Optional + future unwrapping tool
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/bc102e3b Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/bc102e3b Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/bc102e3b Branch: refs/heads/master Commit: bc102e3ba856c9acdb008e7991d984da3ce31a84 Parents: 4fbc8f3 Author: benwa <[email protected]> Authored: Wed Jan 24 14:29:39 2018 +0700 Committer: benwa <[email protected]> Committed: Thu Jan 25 12:02:53 2018 +0700 ---------------------------------------------------------------------- .../apache/james/util/CompletableFutureUtil.java | 6 ++++++ .../james/util/CompletableFutureUtilTest.java | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/bc102e3b/server/container/util-java8/src/main/java/org/apache/james/util/CompletableFutureUtil.java ---------------------------------------------------------------------- diff --git a/server/container/util-java8/src/main/java/org/apache/james/util/CompletableFutureUtil.java b/server/container/util-java8/src/main/java/org/apache/james/util/CompletableFutureUtil.java index 67ee055..d2e83af 100644 --- a/server/container/util-java8/src/main/java/org/apache/james/util/CompletableFutureUtil.java +++ b/server/container/util-java8/src/main/java/org/apache/james/util/CompletableFutureUtil.java @@ -29,6 +29,12 @@ import java.util.stream.Stream; public class CompletableFutureUtil { + public static <T> CompletableFuture<Optional<T>> unwrap(CompletableFuture<Optional<CompletableFuture<T>>> base) { + return base.thenCompose( + optional -> optional.map(future -> future.thenApply(Optional::of)) + .orElse(CompletableFuture.completedFuture(Optional.empty()))); + } + @SafeVarargs public static <T> CompletableFuture<Stream<T>> allOfArray(CompletableFuture<T>... futures) { return allOf(Stream.of(futures)); http://git-wip-us.apache.org/repos/asf/james-project/blob/bc102e3b/server/container/util-java8/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java ---------------------------------------------------------------------- diff --git a/server/container/util-java8/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java b/server/container/util-java8/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java index b4ea41d..c0b892c 100644 --- a/server/container/util-java8/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java +++ b/server/container/util-java8/src/test/java/org/apache/james/util/CompletableFutureUtilTest.java @@ -21,6 +21,7 @@ package org.apache.james.util; import static org.assertj.core.api.Assertions.assertThat; +import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.ExecutorService; @@ -402,4 +403,22 @@ public class CompletableFutureUtilTest { .join()) .isEqualTo(6L); } + + @Test + public void unwrapShouldUnwrapWhenValue() { + assertThat( + CompletableFutureUtil.unwrap( + CompletableFuture.completedFuture(Optional.of(CompletableFuture.completedFuture(1L)))) + .join()) + .isEqualTo(Optional.of(1L)); + } + + @Test + public void unwrapShouldUnwrapWhenEmpty() { + assertThat( + CompletableFutureUtil.unwrap( + CompletableFuture.completedFuture(Optional.empty())) + .join()) + .isEmpty(); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
