这是一个简单的可观察的例子:
observable
.filter(...)
.buffer(50, TimeUnit.MILLISECONDS)
.doOnNext(/* this is executed all the time... */)
.filter(data -> data.size() > 0)
.doOnNext(/* this is not executed because of the filter above... */)
.flatMap(data -> Observable.from(data).distinctUntilChanged())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe();
问题/疑问
我从buffer(...)
函数得到的可观察结果是在结果之后发出结果,大多是空结果。
使用这样的observable过滤正确的方法来处理这个问题吗?会不会有很多这样的订阅同时性价比?或者应该采用不同的方式处理?
答案 0 :(得分:1)
通常,是的,过滤掉下游不需要的东西。
同时会有很多此类订阅的性价比吗?
技术上:是的。更多的计时器,计算线程上更活跃的序列。但是,序列的开销可能远远小于您执行的业务逻辑。
为节省一些开销,我会使用flatMapIterable
:
observable
.filter(...)
.buffer(50, TimeUnit.MILLISECONDS)
.doOnNext(/* this is executed all the time... */)
.filter(data -> data.size() > 0)
.doOnNext(/* this is not executed because of the filter above... */)
.flatMapIterable(data -> data) // <-----------------------------
.distinctUntilChanged()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe();