首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >也许是RxJava :有没有什么好的方法来处理空格?

也许是RxJava :有没有什么好的方法来处理空格?
EN

Stack Overflow用户
提问于 2018-06-06 23:46:08
回答 3查看 10.4K关注 0票数 7

我被这个问题卡住了,这个问题应该很简单。我需要订阅者执行一个代码块时,Maybe已经作为一个Empty Maybe完成。我发现

  1. ,我们可以传递缺省值,或者使用switchIfEmpty,但我觉得这两种方法都很麻烦。
  2. 还有一个subscribe函数,它接受onComplete函数(以及其他两个事件的处理程序),但onComplete不接受任何可用于确定是否为空的参数。
  3. 另一种方式可能是Maybe.isEmpty.blockingGet(),但它也是脏的。

我已经尝试了如下(Kotlin语法):

代码语言:javascript
复制
fun <T> Maybe<T>.subscribeWithEmptyHandler(onSuccess: (T) -> Unit, onError: (Throwable) -> Unit, onEmpty: () -> Unit) {
    this.isEmpty.subscribe({ if (it) onEmpty() }, { onError(it) })
    this.subscribe({ onSuccess(it) }, { onError(it) })
}

但正如预期的那样,它运行了两次订阅,测试如下:

代码语言:javascript
复制
Maybe.create<Int> {
    println("subscribing")
    //Remove line below to create Empty Maybe
    it.onSuccess(5)
    it.onComplete()
}
    .subscribeWithEmptyHandler({println("success")},{println("error")},{println("empty")})

有没有人能建议一下解决这个问题的更好的方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-07 07:52:18

使用Maybe.doOnEvent (java示例):

代码语言:javascript
复制
Maybe
 .empty()
 .doOnEvent((value, error)-> {
    if (value==null && error == null) {
      System.out.println("empty!");
    }})
 .subscribe();
票数 8
EN

Stack Overflow用户

发布于 2018-06-07 00:36:20

我做了以下事情,这比我在问题中写的任何事情都要简洁:

代码语言:javascript
复制
fun <T> Maybe<T>.subscribeWithEmptyHandler(onSuccess: (T) -> Unit, onError: (Throwable) -> Unit, onEmpty: () -> Unit) {
    this.toSingle()
        .subscribe(
            { onSuccess(it) },
            { if (it is NoSuchElementException) onEmpty() else onError(it) }
        )
}

在这里,它只订阅一次,并且不涉及创建新的默认值。我仍然不确定这是不是最好的方法。

票数 2
EN

Stack Overflow用户

发布于 2021-03-15 06:35:18

有一个使用flatMap的解决方案

代码语言:javascript
复制
return Maybe.just<String>(smth)
                .flatMap(
                    Function {
                        Maybe.just(it) // onSuccess
                    },
                    Function {
                        Maybe.error(it) // onError
                    },
                    Callable { // onComplete
                        Maybe.just("Empty")
                    }
                )

代码语言:javascript
复制
return Maybe.just<String>(smth)
                .flatMap(
                    {
                        Maybe.just<String>(it) // onSuccess
                    },
                    {
                        Maybe.error(it) // onError
                    },
                    {
                        Maybe.just("Empty") // onComplete
                    }
                )
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50724513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档