gpt4 book ai didi

java - 如何迭代 Flux 并使用来自另一个 Mono 的结果来过滤 Flux

转载 作者:行者123 更新时间:2023-11-29 04:11:06 28 4
gpt4 key购买 nike

Mono<MyObj1> mono1 = repository.get(id); // data from reactive mongo
Flux<MyObj2> availabilityInfo = getAvailabilityInfo(); // blocking I/O call

我想要实现的是迭代 availabilityInfo 并需要使用单声道数据应用一些条件并返回 MyObj2(其中包含该日期的 delieveryDate 和价格相关信息)。

我会尝试用简单的代码来解释如下

 foreach(MyObj2 obj : availabilityInfo){
if(MyObj1.getX() && obj.getY()){
return or break;
}
}

我想从满足条件的通量中发出第一个元素 - MyObj1.getX() && obj.getY(),即使通量中还有其他元素符合条件.该标准基于来自 mono 的响应,这是一个 react 性的 mongo 数据库调用和来自发出的通量元素的一些事实。

最佳答案

方式一:

 Mono<MyObj2> filteredInfo = mono1.flatMapMany(myObj1 -> 
availabilityInfo.filter(myObj1 -> myObj1.getX() && myObj2.getY()).take(1)).single();

方式二:

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

关于java - 如何迭代 Flux 并使用来自另一个 Mono 的结果来过滤 Flux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55043211/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com