Android Rxjava可观测依赖项
有一些事情我想通过观察来完成,但我想不出一个方法来完成 想象一下我有:Android Rxjava可观测依赖项,android,rx-java,Android,Rx Java,有一些事情我想通过观察来完成,但我想不出一个方法来完成 想象一下我有: 可观察的 可观测B 为了使用ObservableB,我需要ObservableA的结果。 在得到Observable的结果之后,我需要构造一个对象 根据可观测A和可观测B的结果 哪一个运算符是执行此操作的正确运算符=?我找不到 我试过使用zip: return Observable.zip( observableA.flatMap(A -> ObservableB(A)) ,
- 可观察的
- 可观测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);
}
});
returnobservable.zip(
可观察平面图(A->可观察B(A))
,
可观察的
,新功能2(){
@凌驾
公共对象调用(B,A){
字符串ab=someFunction(a.someFunction());
返回新对象(a、ab、b);
}
});
但zip返回的项目不是另一个可见的
编辑:我设法完成了:
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);
returnobservable.zip(
getRosterEntry(UserXMpAddress).flatMap(rosterEntry->getRosterPresence(rosterEntry.getUser()))
,
getRosterEntry(UserXmpAddress)
,新功能2(){
@凌驾
公共好友呼叫(状态、排班、排班){
字符串finalUserXmpAddress=AppXmppUtils.parseXmpAddress(rosterEntry.getUser());
返回新朋友(rosterEntry.getName(),finalUserXmpAddress,状态);
}
}).flatMap(可观察::just);
但它似乎有点过度编码。有没有其他方法可以做到这一点?您应该能够做到以下几点:
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);
}
});
}
});
getRosterEntry(userXmppAddress)
.flatMap(新函数1(){
@凌驾
公共可观察呼叫(最终排班排班){
返回getRosterPresence(rosterEntry.getUser())
.map(新函数1(){
@凌驾
公众朋友电话(状态){
字符串finalUserXmpAddress=AppXmppUtils.parseXmpAddress(rosterEntry.getUser());
返回新朋友(rosterEntry.getName(),finalUserXmpAddress,状态);
}
});
}
});