我知道Dan Lew几乎回答了使用
从不同来源获取数据的问题 .concat(/*...*/)
.take(1)
但是,如果不是从本地存储的数据和改造中获取用户列表,那该怎么办呢?
我需要在显示结果之前对数据执行特定于数据库的操作,例如仅显示不同的用户。在这种情况下,只需在我的网络请求和本地数据上使用concat运算符就不会返回相同的结果。
有没有习惯用RxJava写这个的方法?
答案 0 :(得分:1)
你试过distinct()
吗?根据{{3}},此方法在发出时只会为您提供不同的对象。如果您有自定义对象,我认为您必须实施equals()
和hashCode()
答案 1 :(得分:0)
最终为我工作的是让网络请求返回一个RealmResult并在调用RealmQuery之前保存数据 - 如下所示:
fun network(): Observable<RealmResult<Something>> {
return getAuth()
.andThen(somethingRepository.getRemoteSomething())
.doOnNext { somethings: List<Something> -> somethingRepository.saveSomethings(somethings) }
.flatMap { distinctSomethings }
}
val distinctSomethings: Observable<RealmResults<Something>> by lazy { getDistinctSomethings() }
//... later
fun showDistinctSomethings() {
Observable.concat(
distinctSomethings,
network()
)
.filter { somethings: RealmResults<Something> ->
somethings.toArray().isNotEmpty()
}
.take(1)
.subscribe(/*..show distinct somethings here.*/)
}
至关重要的是,您可以将getDistinctSomethings()
替换为任何复杂的Realm查找,并始终获得正确的结果
希望这可以帮助我身边的人:P