2015-07-03 63 views
1

有一些我想用Obserbles來完成,但我不能想到這樣做的一種方式。Rxjava Observables dependency

想象我有:

  • ObservableA
  • ObservableB

爲了使用ObservableB,我需要從ObservableA結果。 得到ObservableB的結果後,我需要構造一個對象 與ObservableA和Observable B的結果。

這是做適當的運算符=?我找不到任何。

我試着用拉鍊:

return Observable.zip(
     observableA.flatMap(A -> ObservableB(A)) 
     , 
     ObservableA 
     , new Func2<B, A, Object>() { 
      @Override 
      public Object call(B b, A a) { 
       String ab = someFunction(a.someFunction()); 
       return new Object(a, ab, b); 
      } 
     }); 

但是拉鍊回報的項目不是另一個觀察的。

編輯:我設法把它做:

return Observable.zip(
      getRosterEntry(userXmppAddress).flatMap(rosterEntry -> getRosterPresence(rosterEntry.getUser())) 
      , 
      getRosterEntry(userXmppAddress) 
      , new Func2<Presence, RosterEntry, Friend>() { 
       @Override 
       public Friend call(Presence presence, RosterEntry rosterEntry) { 
        String finalUserXmppAddress = AppXmppUtils.parseXmppAddress(rosterEntry.getUser()); 
        return new Friend(rosterEntry.getName(), finalUserXmppAddress, presence); 
       } 
      }).flatMap(Observable::just); 

但它似乎有點overcoded。有沒有其他方法可以實現這一點?

回答

1

你應該能夠做這樣的事情:

getRosterEntry(userXmppAddress) 
     .flatMap(new Func1<RosterEntry, Observable<Friend>>() { 
      @Override 
      public Observable<Friend> call(final RosterEntry rosterEntry) { 
       return getRosterPresence(rosterEntry.getUser()) 
         .map(new Func1<Presence, Friend>() { 
          @Override 
          public Friend call(Presence presence) { 
           String finalUserXmppAddress = AppXmppUtils.parseXmppAddress(rosterEntry.getUser()); 
           return new Friend(rosterEntry.getName(), finalUserXmppAddress, presence); 
          } 
         }); 
      } 
     });