aousov
aousov

Reputation: 372

Reactor Mono/Flux - iterating over array and return result by condition

The question seems very basic, but I just try to learn reactive programming and cannot figure out best answer to this.

I have following synchronous piece of code, it just iterates over providers and finds first user:

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;
    }
}

Now I need to make this code asynchronous, provider may return user or may return Mono.empty().

public interface PrincipalProvider {
    public Mono<User> findUser(String name);
}

Upvotes: 1

Views: 1859

Answers (1)

Martin Tarj&#225;nyi
Martin Tarj&#225;nyi

Reputation: 9947

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

Upvotes: 1

Related Questions