Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用RxJava获得领域和改进的独特结果_Android_Kotlin_Rx Java - Fatal编程技术网

Android 使用RxJava获得领域和改进的独特结果

Android 使用RxJava获得领域和改进的独特结果,android,kotlin,rx-java,Android,Kotlin,Rx Java,我知道Dan Lew很好地回答了从不同来源获取数据的问题 .concat/**/ .take1 但是,如果不从本地存储的数据和改装中获取用户列表,该怎么办呢 在显示结果之前,我需要对数据执行特定于数据库的操作,比如只显示不同的用户。在这种情况下,仅在我的网络请求和本地数据上使用concat操作符不会返回相同的结果 有没有用RxJava编写这篇文章的惯用方法?您尝试过使用distinct吗?根据,此方法将在发射对象时仅为您提供不同的对象。如果您有自定义对象,我认为您必须实现equals和hashC

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

.concat/**/ .take1

但是,如果不从本地存储的数据和改装中获取用户列表,该怎么办呢

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


有没有用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

我想从技术上讲,这对这个例子是可行的。不过,我真正想知道的是,在一般情况下,如何使用数据库操作来实现这一点,我无法对改造后的数据进行操作。