Mono<MyObj1> mono1 = repository.get(id); // data from reactive mongo
Flux<MyObj2> availabilityInfo = getAvailabilityInfo(); // blocking I/O call
foreach(MyObj2 obj : availabilityInfo){
if(MyObj1.getX() && obj.getY()){
return or break;
}
}
方式1:
Mono<MyObj2> filteredInfo = mono1.flatMapMany(myObj1 ->
availabilityInfo.filter(myObj1 -> myObj1.getX() && myObj2.getY()).take(1)).single();
方式2:
Mono<MyObj2> filteredInfo = availabilityInfo.collectList().zipWith(mono1).flatMap(tuple -> {
List<MyObj2> list = tuple.getT1();
MyObj1 myObj1 = tuple.getT2();
for(MyObj2 myObj2:list){
if(myObj1.getX() && myObj2.getY()){
return Mono.just(myObj2);
}
}
return Mono.empty();
});
FlatMapmany
用于通过处理单声道来创建流量。filter
接受谓词,谓词构成过滤通量的基础。
Mono<Integer> mono = Mono.just(3);
Flux<Integer> flux = Flux.just(1, 2, 3, 4, 5, 6);
//Way 1
Mono<Integer> res = mono.flatMapMany(i -> flux.filter(j -> j % i == 0).take(1)).single();
res.subscribe(System.out::println);
//Way 2
flux.collectList().zipWith(mono).flatMap(tuple -> {
List<Integer> list = tuple.getT1();
int x = tuple.getT2();
for(int y:list){
if(y%x==0){
return Mono.just(x);
}
}
return Mono.empty();
}).subscribe(System.out::println);
3
我需要基于另一个流过滤一个流,并获取所有匹配条目的计数。 我已经尝试了以下和各种其他组合,但它没有按预期工作。 这个想法是: < li >对于从0到256的每个数字(流1) < li >查看该号码是否出现在另一个列表中(流2 ),如果出现的话 < li >计算出现次数除以流2中的元素总数(18)。 < li >如果没有出现,请收集0。 这基本上是根据流 2 中的出现次数查找流 1 中数字的频率。
我的代码如下。我需要从mongo db获得每次旅行的车费,然后将每次旅行的所有车费相加,得到总车费。我被一种我不知道如何阅读的单声道音乐所困扰。我试着把它转换成通量,但我得到了通量 "'
Spring webflux Json流不适用于转换为Mono的Flux对象
问题方法需要等待单声道操作结果,在通量操作中使用,并返回通量。 研究我希望流被Mongo反应驱动订阅并终止,所以我不订阅。如果我使用我有单声道 任务如何等待值,在通量操作中使用它并从中获取通量?
我的REST控制器方法应该返回Mono,它必须由两个并行请求构建到另一个web服务,并处理它们的响应,其中一个请求返回Mono,另一个请求返回Flux 如何将单声道的响应与熔剂的响应结合起来进行处理? 显然,控制器是错误的,因为: 1)接受2个或更多的Mono,其中我有Mono和Flux-如何将它们组合起来? 2)也不确定: 是否正确? 有什么建议吗?
webflux包中发生了有趣的事情。然而,我在源头的旅程并没有解决以下问题。 假设我有以下单声道(或通量): 我在webfilter中使用类似的构造,用租户和用户数据丰富管道。然后在控制器中使用如下构造: hello mono的上下文填充在world mono中。我试图弄清楚这是如何做到的,也是为了单元测试的目的。 最后,这仍然是一个谜。我试图用单声道/通量对象上可用的常规方法来做到这一点,但是我