获取发出两种类型的Observable

时间:2017-01-01 00:06:21

标签: java android system.reactive reactive

所以我目前有一个Observable,它返回用户:

 public Observable<Account> getLoggedUserInfo() {


    try {
        return accountService.me(preferencesHelper.getToken()).concatMap(remoteAccount -> {
            return localDatabase.addAccount(remoteAccount);
        });

    } catch (NullPointerException e) {

        return Observable.empty();

    }


}

我有一个Observable,根据ID返回一所学校,如下所示:

  public Observable<School> getSchoolById(@NonNull final String id){

    return schoolService.getSchool(id).concatMap(remoteSchool->localDatabase.addSchool(remoteSchool));

}

现在我想在我的视图中代表学校,但为了做到这一点,我需要创建一个Observable,它会给我一个我开始的帐户(Observable {{1并且发生在它之后的学校,所以我最终会得到像

这样的东西
getLoggedUserInfo

那么如何获得这个Observable<Account, School>{ //Do something with the account and school } ,以及我目前拥有的可观测量,是否可能?  我对Rx还是比较陌生的,而且让我感到困惑的一个重要部分就是语法,提前谢谢!

1 个答案:

答案 0 :(得分:2)

使用元组或中间类。

public Observable<Tuple<<Account, School>> doSomething() {
   return getLoggedUserInfo().zip(getSchoolById("id"), (f, s) -> new Tuple(x, y));
}

我建议你使用正确的元组,但它可以简单:

public class Tuple<X, Y> { 
  public final X x; 
  public final Y y; 
  public Tuple(X x, Y y) { 
    this.x = x; 
    this.y = y; 
  } 
}