Java Mutiny Multi from CompletableFuture<List<T>>



假设您有一个方法:

public CompletableFuture<List<Integer>> getStuffAsync()

我想要与相同的流

Multi<Integer> stream  = Multi
.createFrom().completionStage(() -> getStuffAsync())
.onItem().transformToIterable(Function.identity())

它是列表从开始时指定的方法返回的每个整数的流。。。

但如果没有onItem().transformToIterable(),希望能像一样

Multi.createFrom().completionStageIterable(() -> getStuffAsync())

纯粹出于美观的原因,并节省有价值的字符

您可以使用Multi.createFrom().iterable()并传入CompletableFuture的结果。

Multi<Integer> stream = Multi
.createFrom()
.iterable(getStuffAsync().get());

或者使用实用程序方法创建它。

在util:等包中创建此类Multi.java(或其他名称(

package util;
import io.smallrye.mutiny.groups.*;
import java.util.concurrent.CompletableFuture;
import java.util.function.Function;

public interface Multi<T> extends io.smallrye.mutiny.Multi<T> {
static <T> io.smallrye.mutiny.Multi<T> createFromCompletionStageIterable(CompletableFuture<? extends Iterable<T>> completableFuture) {
return MultiCreate.INSTANCE.completionStage(completableFuture).onItem().transformToIterable(Function.identity());
}
}

然后你可以使用这样的自定义方法:

Multi<Integer> stream = util.Multi
.createFromCompletionStageIterable(getStuffAsync());

最新更新