使用Kotlin在RxJava中处理Nullable Type

Ste*_*ack 3 nullable kotlin rx-java

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

val loadConferencesSingle = service.getConferences()
        .map { it.conferences ?: listOf<Conference>() }
Run Code Online (Sandbox Code Playgroud)

service.getConferences()在这种情况下的呼叫是单个发射ConferecesResponse看起来像

data class ConferencesResponse(val conferences: List<Conference?>? = null)
Run Code Online (Sandbox Code Playgroud)

因此,如果完整发布的会议列表为空,我最终使用Elvis运算符来发出一个空列表.map无法发送空值.

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

nha*_*man 7

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

data class Optional<T>(val value: T?)
fun <T> T?.carry() = Optional(this)
Run Code Online (Sandbox Code Playgroud)

或者,您可以创建一些简单的扩展函数,以使后续运算符更容易:

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() }
Run Code Online (Sandbox Code Playgroud)

..等等.

  • 因为反应流不允许"null"值. (7认同)
  • 啊,没有意识到。抱歉! (2认同)