gpt4 book ai didi

android - 什么是 RxJava 等同于 orElse

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:02:33 26 4
gpt4 key购买 nike

在其他语言的流/函数领域有一个常见的操作,那就是 orElse()。它的作用类似于 if,当当前链没有得到任何结果时,它会更改为备用链。在具有 Maybe 类型的语言中,它基本上会继续 Some 类型的链或更改为 None 类型的 orElse。

理想情况:

Observable.just(false)
.filter(value -> { return value; })
.map(value -> { return 1; })
.orElse(Observable.just(0));

Observable.<Boolean>error(new IllegalStateException("Just playing"))
.filter(value -> { return value; })
.map(value -> { return 1; })
.orElse(Observable.just(0));

目前可以使用 concat 和 takeFirst 重现它,但它在语义上并不相同,并且没有正确处理错误。

Observable.concat(Observable.just(false)
.filter(value -> { return value; })
.map(value -> { return 1; }),
Observable.just(0))
.takeFirst();

最佳答案

看起来他们有,但命名不同:defaultIfEmpty或 switchIfEmpty。

Observable.just(false)
.filter(value -> value)
.map(value -> 1)
.defaultIfEmpty(0)
.subscribe(val -> {
// val == 0
});

Observable.just(false)
.filter(value -> value)
.map(value -> 1)
.switchIfEmpty(Observable.just(0))
.subscribe(val -> {
// val == 0
});

// Error thrown from the first observable
Observable.<Boolean>error(new IllegalStateException("Crash!"))
.filter(value -> value)
.map(value -> 1)
.switchIfEmpty(Observable.<Integer>error(new IllegalStateException("Boom!")))
.subscribe(val -> {
// never reached
}, error -> {
// error.getMessage() == "Crash!"
});

// Error thrown from the second observable
Observable.just(false)
.filter(value -> value)
.map(value -> 1)
.switchIfEmpty(Observable.<Integer>error(new IllegalStateException("Boom!")))
.subscribe(val -> {
// never reached
}, error -> {
// error.getMessage() == "Boom!"
});

关于android - 什么是 RxJava 等同于 orElse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32833705/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com