首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >anyMatch在Mono<Boolean>列表上

anyMatch在Mono<Boolean>列表上
EN

Stack Overflow用户
提问于 2021-05-07 21:30:00
回答 1查看 500关注 0票数 1

我从响应中获得Mono<User>,用户有一个订阅列表,我必须(通过另一个api)检查其中至少有一个符合条件,然后根据这个条件,我必须发送进一步的事件。

代码语言:javascript
运行
复制
Mono<User> user = userFacade.getUser();
user.flatMap(this::hasSub)
    .flatMap(this::sendEvent(Pair.getLeft, Pair.getRight))



Mono<Pair<User,Boolean>> hasSub(User user) {

   Stream<Mono<Boolean>> listOfBooleans= user.getSubscriptions.stream
                           .map(sub -> SubFacade.isPrioSub(sub.getId))//SubFacade returns Mono<Boolean>

   //At this point I am stuck, I need to check if at least one of Stream<Mono<Boolean>> is true, but anyMatch() is arguing about passing Mono<Boolean> into it
   //also to optimize requests it would be nice to have analogue of break to exit iteration once we get Mono<true>, but dropWith() also is not accepting Mono<Boolean>
   return Mono.just(Pair.of(user, 'get boolean from listOfBooleans'))
}

知道怎么解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-08 12:06:30

代码语言:javascript
运行
复制
Mono<Pair<User, Boolean>> hasSub(User user) {
    return Flux.fromIterable(user.getSubscriptions())
               .filterWhen(sub -> SubFacade.isPrioSub(sub.getId()))
               .next() // takes the first element passing the filter
               .map(x -> Pair.of(user, true))
               .defaultIfEmpty(Pair.of(user, false));
}

注意:这将使依次检查给定用户的订阅,并在第一个满意项处停止。如果需要并发性,则应该将filterWhen替换为flatMapfilter

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67441879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档