我是靠谱客的博主 坚定宝马,最近开发中收集的这篇文章主要介绍java map 返回值_rxjava2 map返回值空处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近的项目升级,将rxjava版本由1.x升级到2.x。这期间遇到一个问题,就是map返回空值。

正常的网络请求,有时候可能要求,一个请求完之后,再发起另一个请求,两者的返回结果是一样的,但是如果其中一个请求为空,另一个不为空,不影响程序的正常运行。

我们先模拟个例子

Observable.just("1","2").map {

if (it == "1") null

else it

}.subscribe {

println(it)

}

运行结果

io.reactivex.exceptions.OnErrorNotImplementedException: The mapper function returned a null value.

rxjava的框架内部报错,影响正常的输出。

null过滤掉

那我们怎样将空值过滤掉呢?用filter函数。

Observable.just("1","2").map {

if (it == "1") null

else it

}.filter {

it != null

}.subscribe {

println(it)

}

运行结果,和上面的一样,说明,filter的条件没有走。

那进一步思考,如何在map返回null的时候,可以进入到filter函数。

null替换成另一种类型

Observable.just("1", "2").map {

if (it == "1") Observable.empty()

else it

}.filter {

println("filter:$it")

it is String

}.subscribe {

println(it as String)

}

运行结果

filter:io.reactivex.internal.operators.observable.ObservableEmpty@7946e1f4

filter:2

2

这里采用的是,当返回为null时,将其替换为Observable.empty(),这样保证可以调用filter,在filter中增加过滤规则,可以保证rxjava不报错。

concatMap 实例

Observable.just("1", "2")

.concatMap { s ->

Observable.just(s).map {

if (it == "1") Observable.empty()

else Bean("1", "test")

}

}

.filter {

println("filter$it")

it is Bean

}

.toList()

.subscribe(object : SingleObserver> {

override fun onSubscribe(d: Disposable) {

}

override fun onError(e: Throwable) {

println(e)

}

override fun onSuccess(t: List) {

println("onSuccess${t as List}")

}

})

class Bean(private val id: String, private val name: String) {

override fun toString(): String {

return "id:$id ,name:$name"

}

}

可以看到,采用这种方法,可以完美解决rxjava2,map为空的时框架报错的问题。

最后

以上就是坚定宝马为你收集整理的java map 返回值_rxjava2 map返回值空处理的全部内容,希望文章能够帮你解决java map 返回值_rxjava2 map返回值空处理所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部