假设
Observable<Integer> o1 = Observable.just(0, 1, 2);
Observable<Integer> o2 = Observable.just(2, 4, 6);
我需要构建数字的emition,这些数字来自o2
,除以o1
中的每个数字,但也避免除以零。
即。我需要一些运算符,生成
2 (2 / 1)
1 (2 / 2)
4 (4 / 1)
2 (4 / 2)
6 (6 / 1)
3 (6 / 1)
有什么建议吗?
伙计们,谢谢你们,你说得对!
但更深入地挖掘我的真实案例我遇到了更难的问题。请查看Rx java - difficult case。
答案 0 :(得分:1)
这样做(还没有在IDE中检查过,但是应该正常工作)?
Observable<Integer> o1 = Observable.just(0, 1, 2);
Observable<Integer> o2 = Observable.just(2, 4, 6);
Observable<Integer> o1nonZero = o1.filter(new Predicate<Integer>() {
@Override
public boolean test(Integer integer) throws Exception {
return integer != null && integer != 0;
}
})
o1nonZero.flatMap(new Function<Integer, Observable<Integer>>() {
@Override
public Observable<Integer> apply(Integer integer2) throws Exception {
return o1.map(new Function<Integer, Integer>() {
@Override
public Integer apply(Integer integer1) throws Exception {
return integer2 / integer1;
}
})
}
})
答案 1 :(得分:0)
Observable<Integer> o1 = Observable.just(0, 1, 2);
Observable<Integer> o2 = Observable.just(2, 4, 6);
MathUtil.cartesianProduct(Observable.just(o2, o1))
.filter(array -> array[1] != 0)
.map(array -> array[0] / array[1])
.forEach(System.out::println);
但是cartesianProduct
是什么?
请参阅Cartesian Product了解其定义,并n-ary cartesian product in rxjava了解其实施情况。
答案 2 :(得分:0)
这对我有用。希望这对你也有帮助。
Observable<Integer> num1 = Observable.just(0, 1, 2);
Observable<Integer> num2 = Observable.just(2, 4, 6);
num2.flatMap(
i2 -> num1.filter(i -> i != 0)
.map(i1 -> i2 / i1)
).subscribe(
s -> Log.v("", "result-> " + s),
error -> error.printStackTrace()
);