Favolas
Favolas

Reputation: 7243

RxJava and list of `Single` observable

I'm new in RxJava so I still have many doubts.

I'm creating this:

    @Override
    public Single<Result> saveUser(final User user) {

    return Single.create(new Single.OnSubscribe<Result>() {
        @Override
        public void call(final SingleSubscriber<? super Result> singleSubscriber) {

            if(user.isValid()){
              save(user);
              //Set result ok
              singleSubscriber.onSuccess(result);
            } else {
                //This sets an error.
                singleSubscriber.onError(error);
            }
        }
    });
}

Depending of the success of the operation, the Single emits it's data and who is subscribed receives the data.

The problem now is that at some point I need to store a list of users. Something like:

public void saveUsers(List<User> listOfUsers){
    for (User user : listOfUsers) {
        saveUser(user);
    }
}

How can I create an Single so I can be subscribed to the initial Single

Upvotes: 0

Views: 4193

Answers (1)

Subhrajyoti Majumder
Subhrajyoti Majumder

Reputation: 41200

I would rather create flatmap out of observable list.

public void saveUsers(List<User> listOfUsers){
    Observable.from(listOfUsers).flatMap((User user)->{
         if(user.isValid()){
           save(user);
           //Set result ok
           return Observable.just(result);
         }else
           return Observable.error(new RuntimeException("..."));
   }).retry(2);
}

If you make your saveUsers method blocking, call Observable#toBlocking.

Upvotes: 2

Related Questions