假设您有一个方法:
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());