私たちのアプリケーションをRxJava 1.x.xからRxJava 2.x.xに移行しています。私は私のメソッドの1つに問題があります - それは別の戻り値の型を返します。あなたは結果の型がObservable<PermissionsUsers?>
で見ることができるようにRxJava 2で異なる戻り値の型(RxJava1から更新)
fun permissionsUsers(groupId: String): Observable<PermissionsUsers?> {
return DatabaseRead.permissions(groupId)
.flatMap {
Observable.from(it).map {
combineLatest(DatabaseRead.user(it.getId()), Observable.just(it.level), ::UserLevel)
}.toList()
}
.flatMap {
Observable.combineLatest(it) {
var owner: User? = null
val editPermissions = mutableListOf<User>()
val readOnlyPermissions = mutableListOf<User>()
it.forEach {
it as UserLevel
when (it.level) {
Permission.LEVEL_OWNER -> owner = it.user
Permission.LEVEL_WRITE -> editPermissions.add(it.user)
Permission.LEVEL_READONLY -> readOnlyPermissions.add(it.user)
}
}
PermissionsUsers(checkNotNull(owner, { "Owner doesn't exist" }), editPermissions.sortedBy(User::name), readOnlyPermissions.sortedBy(User::name))
}
}
}
:私は、バージョン1.x.xでこのメソッドを持っていました。 RxJava2では、null可能なオブザーバブルは使用できません。私はこの問題をオプションで解決しました。私はObservableクラスをBackableの戦略を管理する必要があるFlowableの原因に置き換えました。戻り値の型がObservable<PermissionsUsers?>
からFlowable<Optional<PermissionUsers>>
に変更されたことを意味します。 これが変更された方法である:
fun permissionsUsers(groupId: String): Flowable<Optional<PermissionsUsers>> {
return DatabaseRead.permissions(groupId)
.flatMap {
Flowable.fromIterable(it.toSome()).map {
combineLatest(DatabaseRead.user(it.getId()), Flowable.just(it.level.toOptional()), ::UserLevel)
}.toList()
}
.map {
Flowable.combineLatest(it) {
var owner: User? = null
val editPermissions = mutableListOf<User>()
val readOnlyPermissions = mutableListOf<User>()
it.forEach {
it as UserLevel
when (it.level) {
Permission.LEVEL_OWNER -> owner = it.user
Permission.LEVEL_WRITE -> editPermissions.add(it.user)
Permission.LEVEL_READONLY -> readOnlyPermissions.add(it.user)
}
}
PermissionsUsers(checkNotNull(owner, { "Owner doesn't exist" }), editPermissions.sortedBy(User::name), readOnlyPermissions.sortedBy(User::name)).toOptional()
}
}
}
問題は今、必要な戻り値の型は、余分なシングルに包まれていることです。つまり、Single<Flowable<Optional<PermissionsUsers>>>
の代わりにFlowable<Optional<PermissionsUsers>>
のようになります。そのシングルを削除する方法はありますか?私は戻り値の型を変更することはできません。
私はあなたの答えに基づいてコードを更新しました。問題は依然として続きます。 –
@PepaHruškaそれはまだ 'シングル'を返しますか? ['Flowable.flatMap()'](http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Flowable.html#flatMap(io.reactivex.functions.Function))と[Flowable。 map() '](http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Flowable.html#map(io.reactivex.functions.Function))は、両方とも' Flowable'を返します。 'DatabaseRead.permissions()'は 'Flowable'ではなく' Single'を返します... – Bryan