当前位置: 首页 > 知识库问答 >
问题:

将Mono与发射的每个通量元素组合

黄沈浪
2023-03-14

我有一个流量和单声道如下:

Mono<MyRequest> req = request.bodyToMono(MyRequest.class);
Mono<List<String>> mono1 = req.map(r -> r.getList());;
Flux<Long> flux1 = req.map(r -> r.getVals()) // getVals() return list of Long
        .flatMapMany(Flux::fromIterable);
flux1.flatMap(id -> process(id, mono1)) 

但是传递和处理相同的mono1会导致错误只允许一个连接接收订阅服务器。我怎样才能做到以上?谢了!

共有1个答案

葛哲彦
2023-03-14

因为这两个信息来自同一个来源,所以您可以像这样使用一个管道运行整个过程,并将这两个元素包装在元组中,或者更好,一个具有更多含义的域对象中:

Mono<MyRequest> req = // ...
Flux<Tuple2<Long, List<String>>> tuples = req.flatMapMany(r ->
        Flux.fromIterable(r.getVals())
                .map(id -> Tuples.of(id, r.getList()))
);
// once there, you can map that with your process method like
tuples.map(tup -> process(tup.getT1(), tup.getT2());

注意,这看起来很不寻常,这基本上来自于你接收到的对象的结构。

 类似资料:
  • 我有一个关于Spring WebFlux和Reactor的问题。我试图编写一个简单的场景,其中在GETendpoint中,我返回一个表示实体的DTO流,这些实体中的每一个都有一个表示另一个实体的其他DTO的集合。以下是详细信息。 我有两个实体,Person和Song,定义如下: 这些实体由以下DTO表示: 我的服务(为了简洁起见,这里没有显示)确实返回Mono和flux。然后我就有了以下RESTC

  • 根据给定的函数对数组的元素进行分组,并返回每个分组中元素的数量。 使用 Array.map() 将数组的值映射到函数或属性名称。 使用 Array.reduce() 创建一个对象,其中的键是从映射的结果中产生的。 const countBy = (arr, fn) => arr.map(typeof fn === 'function' ? fn : val => val[fn]).reduce

  • 问题内容: 假设我有一个numpy数组: 我有一个对应的“向量”: 我如何沿每一行进行减法或除法运算,所以结果是: 长话短说:如何使用对应于每一行的1D标量数组在2D数组的每一行上执行操作? 问题答案: 干得好。您只需要与广播结合使用(或):

  • 我被分配了一项编程任务,但我被卡住了。其说明如下: 有一个名为“秘密圣诞老人”(给他们礼物)的游戏,有很多孩子参加。对于每个参与的孩子,都有一个来自参与孩子的秘密圣诞朋友。我必须编写一个程序,为每个参与的孩子挑选一个秘密的圣诞老人朋友。 示例:如果Bob,Alice,John和George是参与的孩子,在随机选择之后, 输出可能看起来像 具有相同输入的连续两次程序运行不应有相同的结果。 我的想法是

  • 这是我所面临问题的一个简化例子。 预期的结果是这样的 方法1- 或 方法2- 我尝试了方法2和以下代码 但这会产生“原始A”、“原始B”、“原始C”- 如何做到这一点?