У меня возникли проблемы с поиском пример того, как сделать пользовательский оператор с RxJava 2. Я рассмотрел несколько подходов:Создание пользовательских операторов в RxJava2?
- Использование
Observable.create
, а затемflatMap
ИНГ на него из источника наблюдаемой. Я могу заставить это работать, но это не совсем правильно. Я в конечном итоге создаю статическую функцию, которая предоставляет источникObservable
, а затем flatMap на источнике. В OnSubscribe я создаю экземпляр объекта, через который передаю эмиттер, который обрабатывает и управляет Observable/Emitter (поскольку это не тривиально, и я хочу, чтобы все было как можно инкапсулировано). - Создание
ObservableOperator
и предоставление егоObservable.lift
. Я не могу найти никаких примеров этого для RxJava 2. Мне пришлось отлаживать мой собственный пример, чтобы убедиться, что мое понимание восходящего и нисходящего потока было правильным. Поскольку я не могу найти никаких примеров или документации по этому поводу для RxJava 2, я немного волнуюсь, что могу случайно сделать то, что я не должен. - Создайте мой собственный
Observable
тип. Это похоже на то, как работают основные операторы, многие из которых распространяются наAbstractObservableWithUpstream
. Однако здесь много чего происходит, и, похоже, легко пропустить что-то или сделать что-то, чего я не должен. Я не уверен, должен ли я использовать такой подход или нет. Я прошел через ментальный процесс, и кажется, что он может получить волосатый довольно быстро.
Я собираюсь продолжить работу с опцией № 2, но подумал, что стоит спросить, что поддерживаемый метод для этого был в RxJava2, а также выяснить, есть ли какая-либо документация или примеры для этого.
Для # 2, я подозреваю, что это тот же самый механизм, который используется для создания всех нативных операторов Rx»например 'buffer',' window' и т. д. Итак, вы можете пойти в github и искать исходный код для них, чтобы увидеть, как они реализованы. – Luciano
@ Luciano # 3 - это то, как производятся все операторы rx. Как я уже говорил выше, глядя на исходный код, он быстро становится волосатым. Многие вспомогательные методы называются повсюду.'RxAssembly',' DisposableHelper', и они используются точным образом. Это определенно можно было бы сделать, но я бы просто копировал формат. Я хотел бы убедиться, что я понимаю, что происходит в моем коде. – spierce7