Reputation: 3192
Suppose
Observable<Integer> o1 = Observable.just(0, 1, 2);
Observable<Integer> o2 = Observable.just(2, 4, 6);
I need to build emition of numbers, which are each number from o2
divided by each number from o1
, but also avoid divide by zero.
I.e. I need some operator, producing
2 (2 / 1)
1 (2 / 2)
4 (4 / 1)
2 (4 / 2)
6 (6 / 1)
3 (6 / 1)
Any suggestions?
Guys, thanks for anwers, you are right!
But digging my real case deeper I had more difficult problem. Please give a look to Rx java - difficult case.
Upvotes: 0
Views: 300
Reputation: 988
This works for me. Hope this helps you too.
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()
);
Upvotes: 0
Reputation: 4681
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);
But what is cartesianProduct
?
See Cartesian Product for its definition and n-ary cartesian product in rxjava for its implementation.
Upvotes: 0
Reputation: 2025
Will this do (haven't checked in IDE, but should be working)?
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;
}
})
}
})
Upvotes: 1