给定一系列整数,我想根据一组条件将它分成不同的组:
例如,下面的代码将序列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
我的问题是:
divisors
。如何在以后更新?我认为变化的变量自然可以被认为是一个热门的观察者。但在这种情况下,我不知道如何在第二个observable中使用热Observable<Observable<Integer>>
。join
?答案 0 :(得分:0)
就groupBy
使用而言,正常模式是将其与flatMap结合使用:
o.groupBy(...)
.flatMap(g -> g.whatever())
话虽如此,您还提到源发出的项目可以出现在多个组中。使用flatMap
可以在groupBy
之前完成此操作。例如,您可以flatMap
到Observable.just(Multiple(2, 6), Multiple(3, 6))
,然后groupBy
Multiple
的第一个元素。
希望这对你来说已经足够了。