【问题标题】:How do I return a Mono<List<Object>> into a HashMap?如何将 Mono<List<Object>> 返回到 HashMap?
【发布时间】:2022-09-24 04:35:25
【问题描述】:

我有一个 <Integer, QueryObj> 的哈希图,我需要对其进行迭代并调用外部服务。我的外部服务的方法签名如下:

private Mono<List<ReturnedObj>> fetchList(QueryObj query)

我已经能够验证它是否正常工作并返回我需要的列表。但是,我不确定我的下一步应该是什么,以及我在父方法中的响应类型应该是什么,以便保持反应性实践。基本上,我想将Map&lt;Integer, Query&gt; 转换为Map&lt;Integer, Mono&lt;List&lt;ReturnedObj&gt;&gt;。我想知道Map&lt;Integer, Mono&lt;List&lt;ReturnedObj&gt;&gt; 是否可能?需要Mono&lt;Map&lt;K&lt;V&gt;&gt;吗?

这是当前代码 sn-p - 它不会抛出错误,而是返回一个空结果。我认为命令式和反应式编程的混合不会等待fetchList() 的结果来填充响应。

Map<Integer, QueryObj> queryMap = getQueries(); // setup
return queryMap.entrySet()
                    .stream()
                    .collect(Collectors.toMap(
                            e -> e.getKey(), e -> {
                                try {
                                     return fetchList(e.getValue());
                                } catch (Exception ex) {
                                    ex.printStackTrace();
                                }
                                return null;
                            }));
        }

非常感谢任何帮助!我对此很陌生。

  • I am wondering if Map&lt;Integer, Mono&lt;List&lt;ReturnedObj&gt;&gt;&gt; is even possible?。当然,为什么不呢? empty 是什么意思。在您订阅每个Monos 之前,不会填充任何结果。您确定不想获取Monos 的结果并返回Map&lt;Integer, List&lt;ReturnedObj&gt;&gt; 吗?查看Mono::zip。
  • @K.Nicholas 是对的。根据您的需要,您可能希望反转逻辑,以返回 Flux&lt;Tuple2&lt;Integer, List&lt;ReturnedObj&gt;&gt;。这应该使所有管道“冷”,这意味着消耗通量的人将触发查询。相反,如果你真的想要Map&lt;Integer, Mono&lt;List&lt;ReturnedObj&gt;&gt;,因为你想急切地处理查询,然后缓存它们,你可能想看看Mono上的cache()和connect()运算符。如果您仍在苦苦挣扎,请为您的问题添加更多上下文,然后在评论中回复我。然后我会尝试发布详细的答案。

标签: java spring project-reactor


【解决方案1】:

感谢所有人的建议 - 我最终找到了适合我的解决方案。我最终使我的整个流程具有反应性(就像我从一开始就应该做的那样)并将我的方法的返回类型更改为 Mono<Map<Integer, List>。我在entrySet 和collectMap 上使用Flux.fromIterable() 和flatMap() 将结果汇总到一个地图中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-28
    • 2021-12-15
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多