Android 使用RxJava获得领域和改进的独特结果
我知道Dan Lew很好地回答了从不同来源获取数据的问题 .concat/**/ .take1 但是,如果不从本地存储的数据和改装中获取用户列表,该怎么办呢 在显示结果之前,我需要对数据执行特定于数据库的操作,比如只显示不同的用户。在这种情况下,仅在我的网络请求和本地数据上使用concat操作符不会返回相同的结果Android 使用RxJava获得领域和改进的独特结果,android,kotlin,rx-java,Android,Kotlin,Rx Java,我知道Dan Lew很好地回答了从不同来源获取数据的问题 .concat/**/ .take1 但是,如果不从本地存储的数据和改装中获取用户列表,该怎么办呢 在显示结果之前,我需要对数据执行特定于数据库的操作,比如只显示不同的用户。在这种情况下,仅在我的网络请求和本地数据上使用concat操作符不会返回相同的结果 有没有用RxJava编写这篇文章的惯用方法?您尝试过使用distinct吗?根据,此方法将在发射对象时仅为您提供不同的对象。如果您有自定义对象,我认为您必须实现equals和hashC
有没有用RxJava编写这篇文章的惯用方法?您尝试过使用distinct吗?根据,此方法将在发射对象时仅为您提供不同的对象。如果您有自定义对象,我认为您必须实现equals和hashCode。对我来说,最有效的方法是让网络请求返回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,这样您总能得到正确的结果
希望这对我身边的人有所帮助:p我想从技术上讲,这对这个例子是可行的。不过,我真正想知道的是,在一般情况下,如何使用数据库操作来实现这一点,我无法对改造后的数据进行操作。