Reputation: 372
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
Reputation: 9947
public Mono<User> findUser(String name) {
return Flux.fromIterable(providers)
.concatMap(provider -> provider.findUser(name))
.next();
}
Upvotes: 1