一連の整数を指定して、一連の条件に基づいて異なるグループに分割したいと考えています。
- 条件のセットは変更される場合があります
- 各要素は、ゼロ、1 つ、または複数のグループに属することができます。つまり、これらのグループは互いに重複する可能性があります。
たとえば、次のコードは、シーケンス1..12
を 2 と 3 の倍数の 2 つのグループに分割します。
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>>
しかし、この場合、 2番目のオブザーバブルでホットを使用する方法がわかりません。 - のように、分割されたグループを特定の順序で結合する方法は
join
? - 問題のより良い解決策はありますか?