kotlin - 使用 Kotlin 在 RxJava 中处理可空类型

标签 kotlin rx-java nullable

在 Java 中使用 RxJava2 时,我的优势是 map()自动过滤发出的空值。但是,对于 Kotlin 中的可为空类型,我最终会做这样的事情:

val loadConferencesSingle = service.getConferences()
        .map { it.conferences ?: listOf<Conference>() }

来电service.getConferences()在这种情况下是一个发出 ConferecesResponse 的 Single看起来像
data class ConferencesResponse(val conferences: List<Conference?>? = null)

因此,如果发出的完整 session 列表为空,我最终会使用 Elvis 运算符来发出一个空列表。在 map 中发出空值不可能。

有没有人知道如何使用 Kotlin 在 RxJava 中更好地处理可空类型?我已经喜欢这个解决方案及其简洁性,但我感觉有更好的方法来处理这个问题。

最佳答案

Optional在 Kotlin 中是一个完全有效的类型。值的缺失也是一个结果。您可以创建一个简单的数据类和函数,如下所示:

data class Optional<T>(val value: T?)
fun <T> T?.carry() = Optional(this)

或者,您可以创建一些简单的扩展函数,以使后续运算符更容易:
fun <T, R> Observable<Optional<T>>.mapNullable(mapper: (T?) -> R?) : Observable<Optional<R>>
  = map { mapper(it.value).carry() }

fun <T, R> Observable<Optional<T>>.mapFromNullable(mapper: (T?) -> R) : Observable<R>
  = map { mapper(it.value).carry() }

..等等。

关于kotlin - 使用 Kotlin 在 RxJava 中处理可空类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45160583/

相关文章:

c# - LINQ 的 orderby 子句中的 "Specified cast is not valid"错误

kotlin - Kotlin 中的 lambda 表达式和匿名函数之间有什么显着差异吗?

kotlin - 在 Kotlin 中与自动关闭一起使用

java - 如何为使用 AndroidSchedulers.mainThread() 的函数编写测试;来自 RxAndroid

java-8 - Observable 发射器对 HystrixCommands 产生太大的压力

Laravel 迁移更改使列可以为空

android - Jetpack Compose 中的 App/Scaffold 白色背景更改问题

kotlin - 如何使用 Kotlin 的 Apollo Android,但没有 Android?

javascript - RxJS combineLatest 运算符奇怪的行为

c# - 检查类型是否为 Nullable 的正确方法