You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何省略transformToIterable,将CompletableFuture<List>转为Mutiny Multi流?

简化Multi从CompletableFuture创建流的写法

我有一个返回CompletableFuture<List<Integer>>的方法:

public CompletableFuture<List<Integer>> getStuffAsync()

目前我是这样把它转换成包含单个Integer元素的Multi<Integer>流的:

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

为了让代码更简洁美观,我想省略掉onItem().transformToIterable()这一步,希望能写成类似Multi.createFrom().completionStageIterable(() -> getStuffAsync())这样的形式。

解决方案

如果Quarkus的Multi API没有直接提供这类现成方法,你可以自己封装一个静态工具方法来实现预期的精简写法:

// 可放在工具类中的静态方法
public static <T> Multi<T> completionStageIterable(Supplier<CompletableFuture<List<T>>> supplier) {
    return Multi.createFrom().completionStage(supplier)
        .onItem().transformToIterable(Function.identity());
}

之后使用时就能像你期望的那样简洁:

Multi<Integer> stream = completionStageIterable(this::getStuffAsync);

另外也可以用flatMapIterable来稍微压缩现有代码的写法:

Multi<Integer> stream = Multi.createFrom().completionStage(this::getStuffAsync)
    .flatMapIterable(Function.identity());

内容的提问来源于stack exchange,提问作者JSelser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 13:01:13