Rxjava Observables 依赖
Rxjava Observables dependency
我想用 Observables 完成一些事情,但我想不出办法。
想象我有:
- ObservableA
- ObservableB
为了使用 ObservableB,我需要 ObservableA 的结果。
得到 ObservableB 的结果后,我需要构造一个 Object
结果为 ObservableA 和 Observable B.
哪个操作员适合做这件事=?我找不到。
我尝试使用 zip:
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);
}
});
但 zip return 项目不是另一个可观察的。
编辑:我设法完成了它:
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);
不过好像有点过码了。有没有其他方法可以做到这一点?
您应该可以这样做:
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);
}
});
}
});
我想用 Observables 完成一些事情,但我想不出办法。
想象我有:
- ObservableA
- ObservableB
为了使用 ObservableB,我需要 ObservableA 的结果。 得到 ObservableB 的结果后,我需要构造一个 Object 结果为 ObservableA 和 Observable B.
哪个操作员适合做这件事=?我找不到。
我尝试使用 zip:
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);
}
});
但 zip return 项目不是另一个可观察的。
编辑:我设法完成了它:
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);
不过好像有点过码了。有没有其他方法可以做到这一点?
您应该可以这样做:
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);
}
});
}
});