может быть полезным (по крайней мере, первые 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 не подходит для ветвления рабочих процессов?

Спасибо за помощь!

Ответы на вопрос(2)

Ваш ответ на вопрос