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

通量结果与单点结果的合并

郑衡
2023-03-14
public interface GroupRepository {
       Mono<GroupModel> getGroup(Long groupId);
}

public interface UserRepository {
       Flux<User> getUsers(Set<Long> userIds);   
}

Mono<GroupModel> groupMono = getGroup(groupId);
Flux<User> userFlux = getUsers(Set<Long> users);
//run above instrtuction in parallel and associate user to group.

现在我想实现的是:

如何组合来自UserFlux的响应,并使用类似group.addUsers(userfromFlux)的内容将这些用户与该组关联起来。

有人能帮助如何组合来自userFlux和GroupMono的结果吗。我想我使用了像Zip这样的东西,但它会从源代码进行一对一的映射。在我的例子中,我需要做1到N映射。这里我有一个组,但多个用户,我需要添加到该组。返回mono ,然后将zip运算符与mono一起使用,并提供这里提到的组合器
public static flux zip(publisher<?extends T1>source1,publisher<?extends T2>source2,final bifunction<?super T1,?super T2,?extends o>combinator) 是个好主意吗?

共有1个答案

闻深
2023-03-14

这个1到N映射听起来类似于我在这里回答的一个问题:

你可以flux.zip一个mono和一个flux并对每个flux值重复mono值吗?

万一那个链接掉了,答案又来了。我不认为这种方法会有很好的性能,因为单声道每次都会被重新计算。为了获得更好的性能,如果您的单声道被一个缓慢的操作所包围,最好有一些缓存层。

 // a flux that contains 6 elements.
 final Flux<Integer> userIds = Flux.fromIterable(List.of(1,2,3,4,5,6));

 // a mono of 1 element.
 final Mono<String> groupLabel = Mono.just("someGroupLabel");
 // wrong way - this will only emit 1 event 
 final Flux<Tuple2<Integer, String>> wrongWayOfZippingFluxToMono = userIds
         .zipWith(groupLabel);

 // you'll see that onNext() is only called once, 
 //     emitting 1 item from the mono and first item from the flux.
 wrongWayOfZippingFluxToMono
         .log()
         .subscribe();
 // this is how to zip up the flux and mono how you'd want, 
 //     such that every time the flux emits, the mono emits. 
 final Flux<Tuple2<Integer, String>> correctWayOfZippingFluxToMono = userIds
         .flatMap(userId -> Mono.just(userId)
                 .zipWith(groupLabel));

 // you'll see that onNext() is called 6 times here, as desired. 
 correctWayOfZippingFluxToMono
         .log()
         .subscribe();
 类似资料:
  • 我正在研究一个合并排序,它对int[]进行排序。我的mergeSort方法接受数组、startindex和EndIndex。我还输出了main方法中的before和after。after数组的结果与before相同。我看不出我的ALG做错了什么。我一直在查阅其他人对合并的看法,看起来我做得很对。显然不是,因为列表没有排序…我的合并排序算法做错了什么? 更新:所以我对我的代码做了一些修改,看起来分割

  • 问题内容: 我可以返回还包含渲染视图的Json结果吗? 我需要它来返回提交的表单的新ID及其HTML和其他一些属性。 当我需要从Json对象内的一个动作返回两个(或多个)视图结果时,这也可能会有所帮助。 谢谢! 问题答案: 您还可以将PartialViewResult呈现为字符串,然后通过JSON将该字符串传递给视图,并使用jQuery在页面中呈现。 您可以在这篇文章中看到:http : //ww

  • 问题方法需要等待单声道操作结果,在通量操作中使用,并返回通量。 研究我希望流被Mongo反应驱动订阅并终止,所以我不订阅。如果我使用我有单声道 任务如何等待值,在通量操作中使用它并从中获取通量?

  • 我有索引,其中每个文档都有这样的结构: 我需要计算每个演员对应的电影数量(演员可以在actor_1_name、actor_2_name或actor_3_name字段中) 这3个字段的映射是: 有没有一种方法,我可以聚合的结果,可以结合所有3个演员领域的条款,并给出一个单一的聚合。 目前,我正在为每个actor字段创建单独的聚合,并通过我的JAVA代码将这些不同的聚合合并成一个。 通过创建不同的聚合

  • 问题内容: 我希望将空结果集的总计设置为0。我尝试了以下方法: 结果: 子问题:上面的工作在Oracle中行不通吗? 问题答案: 在有关聚合函数的文档页面中: 应该注意的是,除了这些函数, 当没有选择任何行时 ,这些函数将 返回空值 。特别是,没有行返回空值,而不是预期的零值。必要时,该函数可用于将零替换为null。 所以,如果你想保证返回的值,适用于 结果 的,而不是它的参数: 至于Oracle

  • 我有一个数据库,里面有澳大利亚800家不同的酒吧、俱乐部和餐馆。 我想为我的网站建立一个链接列表,统计不同郊区和主要类别的不同场馆的数量。 像这样: 餐厅,伯恩山(15家) 餐厅,道斯角(6家) 俱乐部,悉尼(138家) 我可以通过首先获得所有场馆来艰难地完成这项任务。然后运行一个场地。distinct('details.location.Suburban')获得所有独特的郊区。 从这里,我可以运