给定一个整数序列,我想根据一组条件将它分成不同的组:
- 条件可能会改变
- 每个元素可以属于零个、一个或多个组。这意味着这些组可以相互重叠。
例如,下面的代码将序列拆分1..12
为两组 2 和 3 的倍数:
final Observable<Integer> divisors = Observable.just(2, 3, 4);
Observable.range(1, 12)
.flatMap(i -> divisors
.filter(divisor -> i % divisor == 0)
.map(divisor -> new Pair<>(divisor, i))
)
.groupBy(pair -> pair.fst)
.subscribe(group -> group.subscribe(pair -> System.out.println("element: " + pair.snd + ", group: " + pair.fst), Throwable::printStackTrace));
输出:
element: 2, group: 2
element: 3, group: 3
element: 4, group: 2
element: 4, group: 4
element: 6, group: 2
element: 6, group: 3
element: 8, group: 2
element: 8, group: 4
element: 9, group: 3
element: 10, group: 2
element: 12, group: 2
element: 12, group: 3
element: 12, group: 4
我的问题是:
- 请注意,在上面的示例中,我们只有 1 个条件集
divisors
。以后怎么更新?我认为一个变化的变量可以很自然地被认为是一个热可观察的。但在这种情况下,我不知道如何Observable<Observable<Integer>>
在第二个 observable 中使用 hot。 - 如何按特定顺序组合拆分组,例如
join
? - 有没有更好的解决问题的方法?