From d9df93fdcb354575dd844f2487e949bd139ed084 Mon Sep 17 00:00:00 2001 From: Jerry Lee Date: Mon, 13 Feb 2023 22:23:57 +0800 Subject: [PATCH] feat: add type safe `anyOf` methods to class `Cffu` --- src/main/java/io/foldright/cffu/Cffu.java | 11 +++++++++++ src/test/java/io/foldright/cffu/CffuTest.kt | 9 +++++++++ 2 files changed, 20 insertions(+) diff --git a/src/main/java/io/foldright/cffu/Cffu.java b/src/main/java/io/foldright/cffu/Cffu.java index 839d34a0..f0d22b38 100644 --- a/src/main/java/io/foldright/cffu/Cffu.java +++ b/src/main/java/io/foldright/cffu/Cffu.java @@ -60,4 +60,15 @@ public static CompletableFuture> resultOf( Triple.of((T1) ret[0], (T2) ret[1], (T3) ret[2]) ); } + + @SuppressWarnings("unchecked") + public static CompletableFuture anyOf(CompletableFuture... cfs) { + return (CompletableFuture) CompletableFuture.anyOf(cfs); + } + + public static CompletableFuture anyOf(List> cfs) { + @SuppressWarnings("unchecked") + CompletableFuture[] arr = cfs.toArray(new CompletableFuture[0]); + return anyOf(arr); + } } diff --git a/src/test/java/io/foldright/cffu/CffuTest.kt b/src/test/java/io/foldright/cffu/CffuTest.kt index c0858c5e..e2a99f52 100644 --- a/src/test/java/io/foldright/cffu/CffuTest.kt +++ b/src/test/java/io/foldright/cffu/CffuTest.kt @@ -35,4 +35,13 @@ class CffuTest : AnnotationSpec() { CompletableFuture.completedFuture(d), ).get() shouldBe Triple.of(n, s, d) } + + @Test + fun test_anyOf() { + val gen: (Int) -> CompletableFuture = { CompletableFuture.supplyAsync { Thread.sleep(10); it } } + val f = CompletableFuture.completedFuture(42) + + Cffu.anyOf(gen(44), gen(43), f).get() shouldBe 42 + Cffu.anyOf(listOf(gen(44), f, gen(43))).get() shouldBe 42 + } }