首页 > 解决方案 > 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);
}

标签: javareactive-programmingproject-reactor

解决方案


public Mono<User> findUser(String name) {
    return Flux.fromIterable(providers)
               .concatMap(provider -> provider.findUser(name))
               .next();
}

推荐阅读