gpt4 book ai didi

java - Rxjava2 : flatmap usage

转载 作者:行者123 更新时间:2023-11-30 05:10:34 27 4
gpt4 key购买 nike

我有以下场景,一旦我从 zip(getHardwareInfo) 获得服务响应,我需要进行另一个服务调用 (getSoftwareInfo())。所以基本上只有在 getHardwareInfo() 成功时才会调用 getSoftwareInfo()。

-现在我想添加一个条件,其中 getSoftwareInfo() 不仅在 getHardwareInfo 成功之后被调用,而且在满足条件时被调用,即 isChristmas()。我已将我的代码从版本 1 更改为版本 2,并且可以正常工作。我调试了它并且似乎工作正常。不确定我是否做对了,因为我是 rxjava 的新手。任何帮助将不胜感激。

版本 1:

public Single<ComputerData> getComputerData(){
return getHardwareInfo().observeOn(AndroidSchedulers.mainThread())
.onErrorREsumeNext(throwable->{
return Single.error()
}).flatMap(hardwareInfo->{
//do something with hardwareInfo
return getSoftwareInfo();
.observeOn(AndroidSchedulers.mainThread())
.onErrorResumeNext(throwable->{
return Single.error());
})
.flatMap(softwareInfo->{
//do something with softwareInfo
});

版本 2:

public Single<ComputerData> getComputerData(){
return getHardwareInfo().observeOn(AndroidSchedulers.mainThread())
.onErrorREsumeNext(throwable->{
return Single.error()
}).flatMap(hardwareInfo->{
//do something with hardwareInfo
if(isChristmas()){
return getSoftwareInfo()
.observeOn(AndroidSchedulers.mainThread());
.onErrorResumeNext(throwable->{
return Single.error());
})
.flatMap(sofwareInfo->{
//do something with softwareInfo
});
} else{
//do something else.
}
});

最佳答案

如果您只想返回错误,则不需要 onErrorResumeNext

就是这样:

getHardwareInfo()
.flatMap(hi -> getSoftwareInfo())
.filter(si -> isChristmas());

你只需要添加适当的调度器

关于java - Rxjava2 : flatmap usage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53821930/

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