使用RxJava获得与领域和改造的独特结果

我知道Dan Lew几乎回答了从不同来源获取数据的问题

.concat(/*...*/) .take(1)

但是,如果不是从我的本地存储的数据和改造的用户列表。

在显示结果之前,我需要对数据执行特定于数据库的操作,例如只显示不同的用户。 在这种情况下,简单地在我的网络请求和本地数据上使用concat运算符将不会返回相同的结果。

有没有用RxJava写这个习惯用法?

你有没有尝试distinct() ? 根据文件 ,这种方法只会给你不同的对象,当他们发射。 如果你有自定义对象,我认为你必须实现equals()hashCode()

结果对我来说工作得非常好,就是让网络请求在调用RealmQuery之前返回一个RealmResult并保存数据,如下所示:

 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.*/) } 

最重要的是,你可以用任何复杂的Realm查找替换getDistinctSomethings() ,并且总能得到正确的结果

希望这可以帮助我旁边的人:P