java - Reactor Mono/Flux - 遍历数组并按条件返回结果
问题描述
这个问题似乎很基础,但我只是尝试学习反应式编程,无法找到最佳答案。
我有以下同步代码,它只是遍历提供者并找到第一个用户:
public interface PrincipalProvider {
public User findUser(String name);
}
public class PrincipalProviderComposite implements PrincipalProvider {
private final List<PrincipalProvider> providers;
@Override
public User findUser(String name) {
User user = null;
for(PrincipalProvider provider: providers) {
user = provider.findUser(name);
if(user != null)
break;
}
return user;
}
}
现在我需要使这段代码异步,提供者可能返回用户或可能返回Mono.empty()
。
public interface PrincipalProvider {
public Mono<User> findUser(String name);
}
解决方案
public Mono<User> findUser(String name) {
return Flux.fromIterable(providers)
.concatMap(provider -> provider.findUser(name))
.next();
}
推荐阅读
- localhost - 我无法使用 chrome 打开 localhost [错误 400]
- node.js - 具有单个文档字符串数组字段的服务器端分页
- flutter - Flutter 实现干净架构的方式
- javascript - 如何用实际日期和所有剩余日期填充数组 -1
- python - 使用 Python 将 JSON 转换为 Google 表格
- npm - postCss 不适用于 laravel 外部的 laravel-mix、scss 和 tailwindcss
- compression - 随机字符串的最佳压缩算法
- node.js - 为什么我在尝试安装我的 react 应用程序时一直收到错误消息
- swiftui - SwiftUI Picker 不与 ObservedObject 绑定
- php - Swift Mailer 不工作并且没有给出错误信息