Прежде всего, извините за мой плохой английский.
Я отредактировал весь ответ, потому что не понял, в чем его вопрос.
Я не знаюкак реализовать функцию дескриптора вашего класса Action, однако возвращаемое значение этой функции должно измениться на асинхронные классы RxJava2.В этом случае, может быть, класс.
- Вы хотите, как реализовать рекурсию асинхронного.
- Обрабатывать список или ноль.
Используйте Может быть, если вы хотите обработать что-то или ноль.в RxJava2
class Action {
Maybe<List<Action>> handle() {}
}
Это то, что возвращает дескриптор вашего класса Action.
void executeActions(Maybe<List<Action>> rxactions) {
// add null check.
// List<Action> handles as stream, but you can use for or iterator or whatever you want.
rxactions.subscribe(actions -> actions.stream().map(action -> executeActions(action.handle())));
}
Важно то, что функция handle () возвращает корректно.
Дополнительно
В RxJava2 есть несколько классов для обработки асинхронных.Единственный, Текучий, Наблюдаемый, Завершаемый.И каждый метод экземпляра классов подписывается.
Проще говоря,
1.Single => возвращает один класс.
2.Flowable, Observable => возвращает несколько классов.(Flowable является более сложным, чем Observable, что добавило обратное давление.)
3.Completable => ничего не возвращает, просто успешно или нет.
4. Может быть, возвращает * или ноль.
5.подписаться - выполнить эту асинхронную операцию.
:: Каждый класс может быть легко преобразован.
:: И существует так много способоврешить одну проблему.так что это просто справка.
ex) Single<List<Foo>> <=> Flowable<Foo> // This is not same. but treat as similar.
PS.
У меня тоже был такой опыт.Я думаю, вам нужно больше узнать о RxJava2, чтобы правильно использовать его повсюду.
Обещание может делиться на Единый, Текучий, Наблюдаемый, Завершаемый.Как описано выше.Это КЛЮЧ, чтобы начать понимать RxJava2.