在rxjava 1中,Observable有这个flatmap方法
public final Observable flatMap(Func1 collectionSelector, Func2 resultSelector)
这允许您将初始结果传递/合并到flatmap订阅者。
如何使用RxJava2获得相同的结果?
我有一个发出A
的单身,我需要根据B
获取A
,然后同时使用A
和B
执行操作
答案 0 :(得分:5)
您在Observable和Flowable上的RxJava2上使用相同的方法,
但是,在RxJava1和2中,Single
没有这样的运算符,您可以转换Single
to Observable
然后应用此运算符。
答案 1 :(得分:1)
您是否尝试过CombineLatest(http://reactivex.io/documentation/operators/combinelatest.html)
基本上你可以发出A和B,然后根据函数结果返回另一个对象:
<强> RXJava1 强>
Observable
.combineLatest([Add here your A observable],
[Add here your B observable],
new Func2<A, B, Result>() {
@Override
public Result call(A a, B b) {
//Do your stuff here combining both results and return the result expected
}
})
<强> RXJava2 强>
Observable
.combineLatest([Add here your A observable],
[Add here your B observable],
new BiFunction<A, B, Result>() {
@Override
public Result apply(A a, B b) throws Exception {
//Do your stuff here combining both results and return the result expected
}
})
答案 2 :(得分:1)
Yosriz的答案是正确的,但要添加代码示例:
假设如下:
class A {}
class B {}
class AB {
private final A a;
private final B b;
AB(A a, B b) {
this.a = a;
this.b = b;
}
}
interface AbRepository {
Single<A> getA();
Single<B> getB(A a);
}
请注意,方法getB
需要A
作为参数。
然后你可以这样做:
abRepository.getA()
.toObservable()
.flatMap(new Function<A, ObservableSource<B>>() {
@Override
public ObservableSource<B> apply(A a) throws Exception {
return abRepository.getB(a)
.toObservable();
}
}, new BiFunction<A, B, AB>() {
@Override
public AB apply(A a, B b) throws Exception {
return new AB(a, b);
}
})
.firstOrError();