Tipo de devolución diferente en RxJava 2 (actualización desde RxJava1)

Estoy migrando nuestra aplicación de RxJava 1.xx a RxJava 2.xx Tengo un problema con uno de mis methods: devuelve un tipo de devolución diferente. Tenía este método en la versión 1.xx:

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)) } } } 

Como puede ver, el tipo de resultado es Observable<PermissionsUsers?> . En RxJava2, los observables nulos no están permitidos. Resolví este problema con Opcional. También reemplacé las classs observables con Flowable porque necesito administrar la estrategia de contrapresión. Significa que el tipo de devolución ha cambiado de Observable<PermissionsUsers?> Flowable<Optional<PermissionUsers>> . Este es el método cambiado:

 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() } } } 

El problema es que ahora el tipo de devolución requerido está envuelto en un único extra. Por lo tanto, se ve así: Single<Flowable<Optional<PermissionsUsers>>>
en lugar de Flowable<Optional<PermissionsUsers>> . ¿Tienes alguna idea de cómo eliminar ese single? No puedo cambiar el tipo de devolución.