gpt4 book ai didi

java - 如何使用 switchIfEmpty RxJava

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

这里的逻辑是,如果数据库中的评级为空,那么我想从 API 中获取它们。我有以下代码:

Observable.from(settingsRatingRepository.getRatingsFromDB())
.toList()
.switchIfEmpty(settingsRatingRepository.getSettingsRatingModulesFromAPI())
.compose(schedulerProvider.getSchedulers())
.subscribe(ratingsList -> {
view.loadRatingLevels(ratingsList, hideLocks);
}, this::handleError);

getRatingsFromDB()调用返回 List<SettingRating> ,但 API 调用返回 Observable<List<SettingRating>> .

但是,当我对此进行单元测试时,当我从数据库调用中传递一个空列表时,它不会执行 API 调用。有人可以帮我解决这个问题吗?这是我的单元测试代码:

when(mockSettingsRatingsRepository.getRatingsFromDB()).thenReturn(Collections.emptyList());
List<SettingsRating> settingsRatings = MockContentHelper.letRepositoryReturnSettingsRatingsFromApi(mockSettingsRatingsRepository);

settingsParentalPresenter.onViewLoad(false);

verify(mockView).loadRatingLevels(settingsRatings, false);

最佳答案

正如@Kiskae 所提到的,这是我将空列表与空 Observable 混淆的事实。因此,我使用了以下我想要的:

public void onViewLoad(boolean hideLocks) {
Observable.just(settingsRatingRepository.getRatingsFromDB())
.flatMap(settingsRatings -> {
if (settingsRatings.isEmpty()) {
return settingsRatingRepository.getSettingsRatingModules();
} else {
return Observable.just(settingsRatings);
}
})
.compose(schedulerProvider.getSchedulers())
.subscribe(ratingsList -> {
view.loadRatingLevels(ratingsList, hideLocks);
}, this::handleError);
}

关于java - 如何使用 switchIfEmpty RxJava,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39078029/

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