RxJava 中的笛卡尔积

2022-09-03 07:14:48

是否有可能在 rxjava 中得到两个可观察量的笛卡尔积?

像这样:

A -> 1,2,3
B -> a,b
A x B -> (1, a), (1, b), (2, a), (2, b), (3, a), (3, b)

答案 1

你想要的是,对于一个数字,像你有字母一样成对。因此,您可以使用和运算符轻松实现这一目标。mapflatMap

    Observable<Integer> number = Observable.from(Arrays.asList(1, 2, 3));
    Observable<String> letters = Observable.from(Arrays.asList("a", "b"));

    Observable<Pair> cartesian = number.flatMap((n) -> letters.map((l) -> new Pair(n, l)));

答案 2

“加入”不是你想要的吗?

    Observable<Integer> a = Observable.fromArray(1, 2, 3);
    Observable<String>  b = Observable.fromArray("a", "b");

    Observable<?> left  = Observable.never();
    Observable<?> right = Observable.never();

    Observable<Pair<Integer, String>> pairs = a.join(b, (aa)->left, (bb)->right, (ai, bi)-> Pair.of(ai, bi));

推荐