может быть полезным (по крайней мере, первые 15 минут)
ользую RxJava для обработки некоторых уведомлений, которые мы извлекаем из очереди.
Казалось, что RxJava отлично работает с простым рабочим процессом, теперь, когда появляются новые требования, этот процесс усложняется с появлением большего количества веток (см. Рисунок ниже для справки).Я попытался проиллюстрировать поток с небольшим модульным тестом:
@Test
public void test() {
Observable.range(1, 100)
.groupBy(n -> n % 3)
.toMap(GroupedObservable::getKey)
.flatMap(m1 -> {
Observable<Integer> ones1 = m1.get(0);
Observable<Integer> twos1 = m1.get(1).map(n -> n - 10);
Observable<Integer> threes = m1.get(2).map(n -> n + 100);
Observable<Integer> onesAndTwos = Observable.merge(ones1, twos1)
.map(n -> n * 3)
.groupBy(n -> n % 2)
.toMap(GroupedObservable::getKey)
.flatMap(m2 -> {
Observable<Integer> ones2 = m2.get(0).map(n -> n * 10);
Observable<Integer> twos2 = m2.get(1).map(n -> n * 100);
return Observable.merge(ones2, twos2);
});
return Observable.merge(onesAndTwos, threes).map(n -> n +1);
})
.subscribe(System.out::println);
}
Хотя использование RxJava все еще технически достижимо, теперь я задаюсь вопросом, является ли это хорошим выбором, так как для формализации ветвления мне пришлось сделать 2 уровня вложенности внутри основногоflatMap
, который не кажется действительно опрятным.
Будет ли это правильный способ описания рабочего процесса, как указано выше? Или RxJava не подходит для ветвления рабочих процессов?
Спасибо за помощь!