>使用Observable.create,然后从源observable对其进行flatMaping.我可以让这个工作,但它感觉不对.我最终创建了一个静态函数,我提供了源Observable,然后是源上的flatMap.在OnSubscribe中,然后我实例化一个我传递发射器的对象,它处理和管理Observable / Emitter(因为它不是微不足道的,我希望所有内容都尽可能封装).
>创建一个ObservableOperator并将其提供给Observable.lift.我找不到RxJava 2的任何这个例子.我必须调试我自己的例子,以确保我对上游和下游的理解是正确的.因为我找不到关于RxJava 2的任何示例或文档,我有点担心我可能会意外地做一些我不应该做的事情.
>创建我自己的Observable类型.这似乎是底层运算符的工作方式,其中许多都扩展了AbstractObservableWithUpstream.虽然这里有很多事情,但似乎很容易错过一些东西或做一些我不应该做的事情.我不确定我是否应该采取这样的方法.我逐步完成了心理过程,看起来很快就会变得毛茸茸.
解决方法
你看过RxJava关于writing operators for 2.x的维基吗?我建议从上到下阅读.
>使用create()是可能的,但是大多数人使用它来发出带有for-each循环的List的元素,而不是认识到Flowable.fromIterable这样做.
>我们保留了此扩展点,尽管RxJava 2运算符本身不使用lift().如果你想避免使用选项3的样板,那么你可以尝试this route.
>这就是RxJava 2操作符的实施方式. AbstractObservableWithUpstream是一个小便利,external implementors不是必需的.